{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Unicode Normalization and Search Anchor Analysis\n",
    "\n",
    "This notebook explores Unicode case folding and normalization properties to identify optimal \"anchor points\" for case-insensitive and normalization-insensitive string search algorithms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "!python -m pip install -q tabulate 2>/dev/null || curl -sS https://bootstrap.pypa.io/get-pip.py | python && python -m pip install -q tabulate"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Before we start, a small reminder on Unicode.\n",
    "Unicode is a versioned standard.\n",
    "In 2025, the latest version is Unicode 17.0.\n",
    "It defines over a million code points, of which around 150,000 are assigned characters.\n",
    "Some of them belong to \"bicameral\" scripts (like Latin, Greek, Cyrillic) that have distinct uppercase and lowercase forms.\n",
    "Others belong to \"unicameral\" scripts (like Chinese, Japanese, Korean, Arabic) that do not have case distinctions.\n",
    "It doesn't, however, mean that there are no different ways to represent the same character in the same script.\n",
    "So \"case folding\" and \"normalization\" are two different concepts.\n",
    "We will explore both in this notebook.\n",
    "\n",
    "Unicode also doesn't require UTF-8 encoding, but UTF-8 is the most popular encoding on the web and in modern applications and the one we will focus on in StringZilla.\n",
    "In UTF-8, each code point is represented by one, two, three, or four bytes.\n",
    "A folded or normalized character can map to a sequence of multiple code points, and each of those code points can have a different length representation in UTF-8.\n",
    "That's why, in the absolute majority of modern text-processing applications full Unicode processing is disabled.\n",
    "\n",
    "Typically, when people perform case-insensitive search, they either:\n",
    "\n",
    "1. Use simple ASCII case folding (A-Z to a-z), ignoring all other characters.\n",
    "2. Use pretty much the only major library that supports full Unicode case folding and normalization, ICU (International Components for Unicode).\n",
    "\n",
    "The first is clearly insufficient, and the second is quite heavy and works at a character level, making SIMD optimizations difficult.\n",
    "This notebook will focus on more SIMD-vectorizable ideas.\n",
    "\n",
    "To start, let's pull the most recent Unicode Character Database (UCD) files from the Unicode website."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using Unicode version: 17.0.0\n",
      "Using cached Unicode 17.0.0 UCD XML: /tmp/ucd-17.0.0.all.flat.xml\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "from collections import Counter\n",
    "import unicodedata\n",
    "from tabulate import tabulate\n",
    "\n",
    "# Import shared Unicode data loading functions\n",
    "sys.path.insert(0, \".\")\n",
    "from test_helpers import (\n",
    "    UNICODE_VERSION,\n",
    "    get_all_codepoints,\n",
    "    get_case_folding_rules_as_codepoints,\n",
    ")\n",
    "\n",
    "# UTF-8 byte boundaries\n",
    "UTF8_1BYTE_MAX = 0x7F  # 127 - ASCII range\n",
    "UTF8_2BYTE_MAX = 0x7FF  # 2047\n",
    "UTF8_3BYTE_MAX = 0xFFFF  # 65535\n",
    "\n",
    "\n",
    "def utf8_hex(text):\n",
    "    \"\"\"Return UTF-8 hex byte sequence for a string.\"\"\"\n",
    "    return \" \".join(f\"0x{b:02X}\" for b in text.encode(\"utf-8\"))\n",
    "\n",
    "\n",
    "print(f\"Using Unicode version: {UNICODE_VERSION}\")\n",
    "all_codepoints = get_all_codepoints(UNICODE_VERSION)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[The highest allowed code point in Unicode is `0x10FFFF` or \"U+10FFFF\"](https://stackoverflow.com/questions/52203351/why-is-unicode-restricted-to-0x10ffff), but it doesn't mean that all code points up to that value are assigned.\n",
    "\n",
    "- Planes 15-16 (U+F0000 to U+10FFFF) are reserved for \"Private Use Area\" and do not contain assigned characters.\n",
    "- Most of plane 14 (U+E0000 to U+E0FFF) is reserved for \"Supplementary Special-purpose Plane\" and contains very few assigned characters.\n",
    "- Many code points in other planes are also unassigned."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total assigned codepoints: 159,866\n",
      "Highest assigned codepoint: 917,999\n",
      "Highest possible codepoint: 1,114,111\n",
      "Range density: 17.414597%\n"
     ]
    }
   ],
   "source": [
    "print(f\"Total assigned codepoints: {len(all_codepoints):,}\")\n",
    "print(f\"Highest assigned codepoint: {all_codepoints[-1]:,}\")\n",
    "print(f\"Highest possible codepoint: {0x10FFFF:,}\")\n",
    "print(f\"Range density: {len(all_codepoints) / (all_codepoints[-1] + 1):.6%}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Unicode Case Folding Analysis\n",
    "\n",
    "### Direct Folding Targets\n",
    "\n",
    "Case folding maps characters to a \"folded\" form for case-insensitive comparisons.\n",
    "This is more comprehensive than simple lowercasing - it handles special cases like German ß → ss.\n",
    "The very first thing we are interested in is: how often each codepoint becomes a folding target for other characters?\n",
    "\n",
    "The reason we are curious about this is that in simple cases, like the Russian letter \"А\" (A) and \"а\" (a), both fold to the same codepoint U+0430 (Cyrillic small letter a).\n",
    "So when scanning for exact case-insensitive matches, we can just compare each 2-byte UTF-8 slice against just 2 possible values: 0xD090 (U+0410) and 0xD0B0 (U+0430), without actually performing any case folding.\n",
    "The easiest way to solve the problem is to avoid it after all!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using cached Unicode 17.0.0 CaseFolding.txt: /tmp/CaseFolding-17.0.0.txt\n",
      "Total case folding rules: 1,585\n"
     ]
    }
   ],
   "source": [
    "case_folds = get_case_folding_rules_as_codepoints(UNICODE_VERSION)\n",
    "print(f\"Total case folding rules: {len(case_folds):,}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total folding rules: 1,705\n",
      "Unique target codepoints: 1,462\n"
     ]
    }
   ],
   "source": [
    "target_frequency = Counter()\n",
    "\n",
    "for source_codepoint, target_codepoints in case_folds.items():\n",
    "    for target_codepoint in target_codepoints:\n",
    "        target_frequency[target_codepoint] += 1\n",
    "\n",
    "print(f\"Total folding rules: {sum(target_frequency.values()):,}\")\n",
    "print(f\"Unique target codepoints: {len(target_frequency):,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's display the most common folding targets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Codepoint   | Char   | UTF-8               |   Freq | Name                                                   |\n",
      "|-------------|--------|---------------------|--------|--------------------------------------------------------|\n",
      "| U+03B9      | ι      | 0xCE 0xB9           |     71 | GREEK SMALL LETTER IOTA                                |\n",
      "| U+0342      | ͂       | 0xCD 0x82           |     11 | COMBINING GREEK PERISPOMENI                            |\n",
      "| U+03C5      | υ      | 0xCF 0x85           |     10 | GREEK SMALL LETTER UPSILON                             |\n",
      "| U+0066      | f      | 0x66                |      9 | LATIN SMALL LETTER F                                   |\n",
      "| U+0308      | ̈       | 0xCC 0x88           |      9 | COMBINING DIAERESIS                                    |\n",
      "| U+0073      | s      | 0x73                |      8 | LATIN SMALL LETTER S                                   |\n",
      "| U+03C9      | ω      | 0xCF 0x89           |      6 | GREEK SMALL LETTER OMEGA                               |\n",
      "| U+0301      | ́       | 0xCC 0x81           |      5 | COMBINING ACUTE ACCENT                                 |\n",
      "| U+03B1      | α      | 0xCE 0xB1           |      5 | GREEK SMALL LETTER ALPHA                               |\n",
      "| U+03B7      | η      | 0xCE 0xB7           |      5 | GREEK SMALL LETTER ETA                                 |\n",
      "| U+0574      | մ      | 0xD5 0xB4           |      5 | ARMENIAN SMALL LETTER MEN                              |\n",
      "| U+0313      | ̓       | 0xCC 0x93           |      5 | COMBINING COMMA ABOVE                                  |\n",
      "| U+0069      | i      | 0x69                |      4 | LATIN SMALL LETTER I                                   |\n",
      "| U+0074      | t      | 0x74                |      4 | LATIN SMALL LETTER T                                   |\n",
      "| U+006C      | l      | 0x6C                |      3 | LATIN SMALL LETTER L                                   |\n",
      "| U+03B8      | θ      | 0xCE 0xB8           |      3 | GREEK SMALL LETTER THETA                               |\n",
      "| U+03C1      | ρ      | 0xCF 0x81           |      3 | GREEK SMALL LETTER RHO                                 |\n",
      "| U+0442      | т      | 0xD1 0x82           |      3 | CYRILLIC SMALL LETTER TE                               |\n",
      "| U+0565      | ե      | 0xD5 0xA5           |      3 | ARMENIAN SMALL LETTER ECH                              |\n",
      "| U+0576      | ն      | 0xD5 0xB6           |      3 | ARMENIAN SMALL LETTER NOW                              |\n",
      "| U+1F00      | ἀ      | 0xE1 0xBC 0x80      |      3 | GREEK SMALL LETTER ALPHA WITH PSILI                    |\n",
      "| U+1F01      | ἁ      | 0xE1 0xBC 0x81      |      3 | GREEK SMALL LETTER ALPHA WITH DASIA                    |\n",
      "| U+1F02      | ἂ      | 0xE1 0xBC 0x82      |      3 | GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA          |\n",
      "| U+1F03      | ἃ      | 0xE1 0xBC 0x83      |      3 | GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA          |\n",
      "| U+1F04      | ἄ      | 0xE1 0xBC 0x84      |      3 | GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA           |\n",
      "| U+1F05      | ἅ      | 0xE1 0xBC 0x85      |      3 | GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA           |\n",
      "| U+1F06      | ἆ      | 0xE1 0xBC 0x86      |      3 | GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI    |\n",
      "| U+1F07      | ἇ      | 0xE1 0xBC 0x87      |      3 | GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI    |\n",
      "| U+1F20      | ἠ      | 0xE1 0xBC 0xA0      |      3 | GREEK SMALL LETTER ETA WITH PSILI                      |\n",
      "| U+1F21      | ἡ      | 0xE1 0xBC 0xA1      |      3 | GREEK SMALL LETTER ETA WITH DASIA                      |\n",
      "| U+1F22      | ἢ      | 0xE1 0xBC 0xA2      |      3 | GREEK SMALL LETTER ETA WITH PSILI AND VARIA            |\n",
      "| U+1F23      | ἣ      | 0xE1 0xBC 0xA3      |      3 | GREEK SMALL LETTER ETA WITH DASIA AND VARIA            |\n",
      "| U+1F24      | ἤ      | 0xE1 0xBC 0xA4      |      3 | GREEK SMALL LETTER ETA WITH PSILI AND OXIA             |\n",
      "| U+1F25      | ἥ      | 0xE1 0xBC 0xA5      |      3 | GREEK SMALL LETTER ETA WITH DASIA AND OXIA             |\n",
      "| U+1F26      | ἦ      | 0xE1 0xBC 0xA6      |      3 | GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI      |\n",
      "| U+1F27      | ἧ      | 0xE1 0xBC 0xA7      |      3 | GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI      |\n",
      "| U+0300      | ̀       | 0xCC 0x80           |      3 | COMBINING GRAVE ACCENT                                 |\n",
      "| U+1F60      | ὠ      | 0xE1 0xBD 0xA0      |      3 | GREEK SMALL LETTER OMEGA WITH PSILI                    |\n",
      "| U+1F61      | ὡ      | 0xE1 0xBD 0xA1      |      3 | GREEK SMALL LETTER OMEGA WITH DASIA                    |\n",
      "| U+1F62      | ὢ      | 0xE1 0xBD 0xA2      |      3 | GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA          |\n",
      "| U+1F63      | ὣ      | 0xE1 0xBD 0xA3      |      3 | GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA          |\n",
      "| U+1F64      | ὤ      | 0xE1 0xBD 0xA4      |      3 | GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA           |\n",
      "| U+1F65      | ὥ      | 0xE1 0xBD 0xA5      |      3 | GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA           |\n",
      "| U+1F66      | ὦ      | 0xE1 0xBD 0xA6      |      3 | GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI    |\n",
      "| U+1F67      | ὧ      | 0xE1 0xBD 0xA7      |      3 | GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI    |\n",
      "| U+0061      | a      | 0x61                |      2 | LATIN SMALL LETTER A                                   |\n",
      "| U+0068      | h      | 0x68                |      2 | LATIN SMALL LETTER H                                   |\n",
      "| U+006A      | j      | 0x6A                |      2 | LATIN SMALL LETTER J                                   |\n",
      "| U+006B      | k      | 0x6B                |      2 | LATIN SMALL LETTER K                                   |\n",
      "| U+006E      | n      | 0x6E                |      2 | LATIN SMALL LETTER N                                   |\n",
      "| U+0077      | w      | 0x77                |      2 | LATIN SMALL LETTER W                                   |\n",
      "| U+0079      | y      | 0x79                |      2 | LATIN SMALL LETTER Y                                   |\n",
      "| U+03BC      | μ      | 0xCE 0xBC           |      2 | GREEK SMALL LETTER MU                                  |\n",
      "| U+00E5      | å      | 0xC3 0xA5           |      2 | LATIN SMALL LETTER A WITH RING ABOVE                   |\n",
      "| U+01C6      | ǆ      | 0xC7 0x86           |      2 | LATIN SMALL LETTER DZ WITH CARON                       |\n",
      "| U+01C9      | ǉ      | 0xC7 0x89           |      2 | LATIN SMALL LETTER LJ                                  |\n",
      "| U+01CC      | ǌ      | 0xC7 0x8C           |      2 | LATIN SMALL LETTER NJ                                  |\n",
      "| U+01F3      | ǳ      | 0xC7 0xB3           |      2 | LATIN SMALL LETTER DZ                                  |\n",
      "| U+03AC      | ά      | 0xCE 0xAC           |      2 | GREEK SMALL LETTER ALPHA WITH TONOS                    |\n",
      "| U+03AE      | ή      | 0xCE 0xAE           |      2 | GREEK SMALL LETTER ETA WITH TONOS                      |\n",
      "| U+03CE      | ώ      | 0xCF 0x8E           |      2 | GREEK SMALL LETTER OMEGA WITH TONOS                    |\n",
      "| U+03B2      | β      | 0xCE 0xB2           |      2 | GREEK SMALL LETTER BETA                                |\n",
      "| U+03B5      | ε      | 0xCE 0xB5           |      2 | GREEK SMALL LETTER EPSILON                             |\n",
      "| U+03BA      | κ      | 0xCE 0xBA           |      2 | GREEK SMALL LETTER KAPPA                               |\n",
      "| U+03C0      | π      | 0xCF 0x80           |      2 | GREEK SMALL LETTER PI                                  |\n",
      "| U+03C3      | σ      | 0xCF 0x83           |      2 | GREEK SMALL LETTER SIGMA                               |\n",
      "| U+03C6      | φ      | 0xCF 0x86           |      2 | GREEK SMALL LETTER PHI                                 |\n",
      "| U+0432      | в      | 0xD0 0xB2           |      2 | CYRILLIC SMALL LETTER VE                               |\n",
      "| U+0434      | д      | 0xD0 0xB4           |      2 | CYRILLIC SMALL LETTER DE                               |\n",
      "| U+043E      | о      | 0xD0 0xBE           |      2 | CYRILLIC SMALL LETTER O                                |\n",
      "| U+0441      | с      | 0xD1 0x81           |      2 | CYRILLIC SMALL LETTER ES                               |\n",
      "| U+044A      | ъ      | 0xD1 0x8A           |      2 | CYRILLIC SMALL LETTER HARD SIGN                        |\n",
      "| U+0463      | ѣ      | 0xD1 0xA3           |      2 | CYRILLIC SMALL LETTER YAT                              |\n",
      "| U+056B      | ի      | 0xD5 0xAB           |      2 | ARMENIAN SMALL LETTER INI                              |\n",
      "| U+056D      | խ      | 0xD5 0xAD           |      2 | ARMENIAN SMALL LETTER XEH                              |\n",
      "| U+057E      | վ      | 0xD5 0xBE           |      2 | ARMENIAN SMALL LETTER VEW                              |\n",
      "| U+0582      | ւ      | 0xD6 0x82           |      2 | ARMENIAN SMALL LETTER YIWN                             |\n",
      "| U+A64B      | ꙋ      | 0xEA 0x99 0x8B      |      2 | CYRILLIC SMALL LETTER MONOGRAPH UK                     |\n",
      "| U+1E61      | ṡ      | 0xE1 0xB9 0xA1      |      2 | LATIN SMALL LETTER S WITH DOT ABOVE                    |\n",
      "| U+030A      | ̊       | 0xCC 0x8A           |      2 | COMBINING RING ABOVE                                   |\n",
      "| U+1F70      | ὰ      | 0xE1 0xBD 0xB0      |      2 | GREEK SMALL LETTER ALPHA WITH VARIA                    |\n",
      "| U+1F74      | ὴ      | 0xE1 0xBD 0xB4      |      2 | GREEK SMALL LETTER ETA WITH VARIA                      |\n",
      "| U+1F7C      | ὼ      | 0xE1 0xBD 0xBC      |      2 | GREEK SMALL LETTER OMEGA WITH VARIA                    |\n",
      "| U+0062      | b      | 0x62                |      1 | LATIN SMALL LETTER B                                   |\n",
      "| U+0063      | c      | 0x63                |      1 | LATIN SMALL LETTER C                                   |\n",
      "| U+0064      | d      | 0x64                |      1 | LATIN SMALL LETTER D                                   |\n",
      "| U+0065      | e      | 0x65                |      1 | LATIN SMALL LETTER E                                   |\n",
      "| U+0067      | g      | 0x67                |      1 | LATIN SMALL LETTER G                                   |\n",
      "| U+006D      | m      | 0x6D                |      1 | LATIN SMALL LETTER M                                   |\n",
      "| U+006F      | o      | 0x6F                |      1 | LATIN SMALL LETTER O                                   |\n",
      "| U+0070      | p      | 0x70                |      1 | LATIN SMALL LETTER P                                   |\n",
      "| U+0071      | q      | 0x71                |      1 | LATIN SMALL LETTER Q                                   |\n",
      "| U+0072      | r      | 0x72                |      1 | LATIN SMALL LETTER R                                   |\n",
      "| U+0075      | u      | 0x75                |      1 | LATIN SMALL LETTER U                                   |\n",
      "| U+0076      | v      | 0x76                |      1 | LATIN SMALL LETTER V                                   |\n",
      "| U+0078      | x      | 0x78                |      1 | LATIN SMALL LETTER X                                   |\n",
      "| U+007A      | z      | 0x7A                |      1 | LATIN SMALL LETTER Z                                   |\n",
      "| U+00E0      | à      | 0xC3 0xA0           |      1 | LATIN SMALL LETTER A WITH GRAVE                        |\n",
      "| U+00E1      | á      | 0xC3 0xA1           |      1 | LATIN SMALL LETTER A WITH ACUTE                        |\n",
      "| U+00E2      | â      | 0xC3 0xA2           |      1 | LATIN SMALL LETTER A WITH CIRCUMFLEX                   |\n",
      "| U+00E3      | ã      | 0xC3 0xA3           |      1 | LATIN SMALL LETTER A WITH TILDE                        |\n",
      "| U+00E4      | ä      | 0xC3 0xA4           |      1 | LATIN SMALL LETTER A WITH DIAERESIS                    |\n",
      "| U+00E6      | æ      | 0xC3 0xA6           |      1 | LATIN SMALL LETTER AE                                  |\n",
      "| U+00E7      | ç      | 0xC3 0xA7           |      1 | LATIN SMALL LETTER C WITH CEDILLA                      |\n",
      "| U+00E8      | è      | 0xC3 0xA8           |      1 | LATIN SMALL LETTER E WITH GRAVE                        |\n",
      "| U+00E9      | é      | 0xC3 0xA9           |      1 | LATIN SMALL LETTER E WITH ACUTE                        |\n",
      "| U+00EA      | ê      | 0xC3 0xAA           |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX                   |\n",
      "| U+00EB      | ë      | 0xC3 0xAB           |      1 | LATIN SMALL LETTER E WITH DIAERESIS                    |\n",
      "| U+00EC      | ì      | 0xC3 0xAC           |      1 | LATIN SMALL LETTER I WITH GRAVE                        |\n",
      "| U+00ED      | í      | 0xC3 0xAD           |      1 | LATIN SMALL LETTER I WITH ACUTE                        |\n",
      "| U+00EE      | î      | 0xC3 0xAE           |      1 | LATIN SMALL LETTER I WITH CIRCUMFLEX                   |\n",
      "| U+00EF      | ï      | 0xC3 0xAF           |      1 | LATIN SMALL LETTER I WITH DIAERESIS                    |\n",
      "| U+00F0      | ð      | 0xC3 0xB0           |      1 | LATIN SMALL LETTER ETH                                 |\n",
      "| U+00F1      | ñ      | 0xC3 0xB1           |      1 | LATIN SMALL LETTER N WITH TILDE                        |\n",
      "| U+00F2      | ò      | 0xC3 0xB2           |      1 | LATIN SMALL LETTER O WITH GRAVE                        |\n",
      "| U+00F3      | ó      | 0xC3 0xB3           |      1 | LATIN SMALL LETTER O WITH ACUTE                        |\n",
      "| U+00F4      | ô      | 0xC3 0xB4           |      1 | LATIN SMALL LETTER O WITH CIRCUMFLEX                   |\n",
      "| U+00F5      | õ      | 0xC3 0xB5           |      1 | LATIN SMALL LETTER O WITH TILDE                        |\n",
      "| U+00F6      | ö      | 0xC3 0xB6           |      1 | LATIN SMALL LETTER O WITH DIAERESIS                    |\n",
      "| U+00F8      | ø      | 0xC3 0xB8           |      1 | LATIN SMALL LETTER O WITH STROKE                       |\n",
      "| U+00F9      | ù      | 0xC3 0xB9           |      1 | LATIN SMALL LETTER U WITH GRAVE                        |\n",
      "| U+00FA      | ú      | 0xC3 0xBA           |      1 | LATIN SMALL LETTER U WITH ACUTE                        |\n",
      "| U+00FB      | û      | 0xC3 0xBB           |      1 | LATIN SMALL LETTER U WITH CIRCUMFLEX                   |\n",
      "| U+00FC      | ü      | 0xC3 0xBC           |      1 | LATIN SMALL LETTER U WITH DIAERESIS                    |\n",
      "| U+00FD      | ý      | 0xC3 0xBD           |      1 | LATIN SMALL LETTER Y WITH ACUTE                        |\n",
      "| U+00FE      | þ      | 0xC3 0xBE           |      1 | LATIN SMALL LETTER THORN                               |\n",
      "| U+0101      | ā      | 0xC4 0x81           |      1 | LATIN SMALL LETTER A WITH MACRON                       |\n",
      "| U+0103      | ă      | 0xC4 0x83           |      1 | LATIN SMALL LETTER A WITH BREVE                        |\n",
      "| U+0105      | ą      | 0xC4 0x85           |      1 | LATIN SMALL LETTER A WITH OGONEK                       |\n",
      "| U+0107      | ć      | 0xC4 0x87           |      1 | LATIN SMALL LETTER C WITH ACUTE                        |\n",
      "| U+0109      | ĉ      | 0xC4 0x89           |      1 | LATIN SMALL LETTER C WITH CIRCUMFLEX                   |\n",
      "| U+010B      | ċ      | 0xC4 0x8B           |      1 | LATIN SMALL LETTER C WITH DOT ABOVE                    |\n",
      "| U+010D      | č      | 0xC4 0x8D           |      1 | LATIN SMALL LETTER C WITH CARON                        |\n",
      "| U+010F      | ď      | 0xC4 0x8F           |      1 | LATIN SMALL LETTER D WITH CARON                        |\n",
      "| U+0111      | đ      | 0xC4 0x91           |      1 | LATIN SMALL LETTER D WITH STROKE                       |\n",
      "| U+0113      | ē      | 0xC4 0x93           |      1 | LATIN SMALL LETTER E WITH MACRON                       |\n",
      "| U+0115      | ĕ      | 0xC4 0x95           |      1 | LATIN SMALL LETTER E WITH BREVE                        |\n",
      "| U+0117      | ė      | 0xC4 0x97           |      1 | LATIN SMALL LETTER E WITH DOT ABOVE                    |\n",
      "| U+0119      | ę      | 0xC4 0x99           |      1 | LATIN SMALL LETTER E WITH OGONEK                       |\n",
      "| U+011B      | ě      | 0xC4 0x9B           |      1 | LATIN SMALL LETTER E WITH CARON                        |\n",
      "| U+011D      | ĝ      | 0xC4 0x9D           |      1 | LATIN SMALL LETTER G WITH CIRCUMFLEX                   |\n",
      "| U+011F      | ğ      | 0xC4 0x9F           |      1 | LATIN SMALL LETTER G WITH BREVE                        |\n",
      "| U+0121      | ġ      | 0xC4 0xA1           |      1 | LATIN SMALL LETTER G WITH DOT ABOVE                    |\n",
      "| U+0123      | ģ      | 0xC4 0xA3           |      1 | LATIN SMALL LETTER G WITH CEDILLA                      |\n",
      "| U+0125      | ĥ      | 0xC4 0xA5           |      1 | LATIN SMALL LETTER H WITH CIRCUMFLEX                   |\n",
      "| U+0127      | ħ      | 0xC4 0xA7           |      1 | LATIN SMALL LETTER H WITH STROKE                       |\n",
      "| U+0129      | ĩ      | 0xC4 0xA9           |      1 | LATIN SMALL LETTER I WITH TILDE                        |\n",
      "| U+012B      | ī      | 0xC4 0xAB           |      1 | LATIN SMALL LETTER I WITH MACRON                       |\n",
      "| U+012D      | ĭ      | 0xC4 0xAD           |      1 | LATIN SMALL LETTER I WITH BREVE                        |\n",
      "| U+012F      | į      | 0xC4 0xAF           |      1 | LATIN SMALL LETTER I WITH OGONEK                       |\n",
      "| U+0307      | ̇       | 0xCC 0x87           |      1 | COMBINING DOT ABOVE                                    |\n",
      "| U+0133      | ĳ      | 0xC4 0xB3           |      1 | LATIN SMALL LIGATURE IJ                                |\n",
      "| U+0135      | ĵ      | 0xC4 0xB5           |      1 | LATIN SMALL LETTER J WITH CIRCUMFLEX                   |\n",
      "| U+0137      | ķ      | 0xC4 0xB7           |      1 | LATIN SMALL LETTER K WITH CEDILLA                      |\n",
      "| U+013A      | ĺ      | 0xC4 0xBA           |      1 | LATIN SMALL LETTER L WITH ACUTE                        |\n",
      "| U+013C      | ļ      | 0xC4 0xBC           |      1 | LATIN SMALL LETTER L WITH CEDILLA                      |\n",
      "| U+013E      | ľ      | 0xC4 0xBE           |      1 | LATIN SMALL LETTER L WITH CARON                        |\n",
      "| U+0140      | ŀ      | 0xC5 0x80           |      1 | LATIN SMALL LETTER L WITH MIDDLE DOT                   |\n",
      "| U+0142      | ł      | 0xC5 0x82           |      1 | LATIN SMALL LETTER L WITH STROKE                       |\n",
      "| U+0144      | ń      | 0xC5 0x84           |      1 | LATIN SMALL LETTER N WITH ACUTE                        |\n",
      "| U+0146      | ņ      | 0xC5 0x86           |      1 | LATIN SMALL LETTER N WITH CEDILLA                      |\n",
      "| U+0148      | ň      | 0xC5 0x88           |      1 | LATIN SMALL LETTER N WITH CARON                        |\n",
      "| U+02BC      | ʼ      | 0xCA 0xBC           |      1 | MODIFIER LETTER APOSTROPHE                             |\n",
      "| U+014B      | ŋ      | 0xC5 0x8B           |      1 | LATIN SMALL LETTER ENG                                 |\n",
      "| U+014D      | ō      | 0xC5 0x8D           |      1 | LATIN SMALL LETTER O WITH MACRON                       |\n",
      "| U+014F      | ŏ      | 0xC5 0x8F           |      1 | LATIN SMALL LETTER O WITH BREVE                        |\n",
      "| U+0151      | ő      | 0xC5 0x91           |      1 | LATIN SMALL LETTER O WITH DOUBLE ACUTE                 |\n",
      "| U+0153      | œ      | 0xC5 0x93           |      1 | LATIN SMALL LIGATURE OE                                |\n",
      "| U+0155      | ŕ      | 0xC5 0x95           |      1 | LATIN SMALL LETTER R WITH ACUTE                        |\n",
      "| U+0157      | ŗ      | 0xC5 0x97           |      1 | LATIN SMALL LETTER R WITH CEDILLA                      |\n",
      "| U+0159      | ř      | 0xC5 0x99           |      1 | LATIN SMALL LETTER R WITH CARON                        |\n",
      "| U+015B      | ś      | 0xC5 0x9B           |      1 | LATIN SMALL LETTER S WITH ACUTE                        |\n",
      "| U+015D      | ŝ      | 0xC5 0x9D           |      1 | LATIN SMALL LETTER S WITH CIRCUMFLEX                   |\n",
      "| U+015F      | ş      | 0xC5 0x9F           |      1 | LATIN SMALL LETTER S WITH CEDILLA                      |\n",
      "| U+0161      | š      | 0xC5 0xA1           |      1 | LATIN SMALL LETTER S WITH CARON                        |\n",
      "| U+0163      | ţ      | 0xC5 0xA3           |      1 | LATIN SMALL LETTER T WITH CEDILLA                      |\n",
      "| U+0165      | ť      | 0xC5 0xA5           |      1 | LATIN SMALL LETTER T WITH CARON                        |\n",
      "| U+0167      | ŧ      | 0xC5 0xA7           |      1 | LATIN SMALL LETTER T WITH STROKE                       |\n",
      "| U+0169      | ũ      | 0xC5 0xA9           |      1 | LATIN SMALL LETTER U WITH TILDE                        |\n",
      "| U+016B      | ū      | 0xC5 0xAB           |      1 | LATIN SMALL LETTER U WITH MACRON                       |\n",
      "| U+016D      | ŭ      | 0xC5 0xAD           |      1 | LATIN SMALL LETTER U WITH BREVE                        |\n",
      "| U+016F      | ů      | 0xC5 0xAF           |      1 | LATIN SMALL LETTER U WITH RING ABOVE                   |\n",
      "| U+0171      | ű      | 0xC5 0xB1           |      1 | LATIN SMALL LETTER U WITH DOUBLE ACUTE                 |\n",
      "| U+0173      | ų      | 0xC5 0xB3           |      1 | LATIN SMALL LETTER U WITH OGONEK                       |\n",
      "| U+0175      | ŵ      | 0xC5 0xB5           |      1 | LATIN SMALL LETTER W WITH CIRCUMFLEX                   |\n",
      "| U+0177      | ŷ      | 0xC5 0xB7           |      1 | LATIN SMALL LETTER Y WITH CIRCUMFLEX                   |\n",
      "| U+00FF      | ÿ      | 0xC3 0xBF           |      1 | LATIN SMALL LETTER Y WITH DIAERESIS                    |\n",
      "| U+017A      | ź      | 0xC5 0xBA           |      1 | LATIN SMALL LETTER Z WITH ACUTE                        |\n",
      "| U+017C      | ż      | 0xC5 0xBC           |      1 | LATIN SMALL LETTER Z WITH DOT ABOVE                    |\n",
      "| U+017E      | ž      | 0xC5 0xBE           |      1 | LATIN SMALL LETTER Z WITH CARON                        |\n",
      "| U+0253      | ɓ      | 0xC9 0x93           |      1 | LATIN SMALL LETTER B WITH HOOK                         |\n",
      "| U+0183      | ƃ      | 0xC6 0x83           |      1 | LATIN SMALL LETTER B WITH TOPBAR                       |\n",
      "| U+0185      | ƅ      | 0xC6 0x85           |      1 | LATIN SMALL LETTER TONE SIX                            |\n",
      "| U+0254      | ɔ      | 0xC9 0x94           |      1 | LATIN SMALL LETTER OPEN O                              |\n",
      "| U+0188      | ƈ      | 0xC6 0x88           |      1 | LATIN SMALL LETTER C WITH HOOK                         |\n",
      "| U+0256      | ɖ      | 0xC9 0x96           |      1 | LATIN SMALL LETTER D WITH TAIL                         |\n",
      "| U+0257      | ɗ      | 0xC9 0x97           |      1 | LATIN SMALL LETTER D WITH HOOK                         |\n",
      "| U+018C      | ƌ      | 0xC6 0x8C           |      1 | LATIN SMALL LETTER D WITH TOPBAR                       |\n",
      "| U+01DD      | ǝ      | 0xC7 0x9D           |      1 | LATIN SMALL LETTER TURNED E                            |\n",
      "| U+0259      | ə      | 0xC9 0x99           |      1 | LATIN SMALL LETTER SCHWA                               |\n",
      "| U+025B      | ɛ      | 0xC9 0x9B           |      1 | LATIN SMALL LETTER OPEN E                              |\n",
      "| U+0192      | ƒ      | 0xC6 0x92           |      1 | LATIN SMALL LETTER F WITH HOOK                         |\n",
      "| U+0260      | ɠ      | 0xC9 0xA0           |      1 | LATIN SMALL LETTER G WITH HOOK                         |\n",
      "| U+0263      | ɣ      | 0xC9 0xA3           |      1 | LATIN SMALL LETTER GAMMA                               |\n",
      "| U+0269      | ɩ      | 0xC9 0xA9           |      1 | LATIN SMALL LETTER IOTA                                |\n",
      "| U+0268      | ɨ      | 0xC9 0xA8           |      1 | LATIN SMALL LETTER I WITH STROKE                       |\n",
      "| U+0199      | ƙ      | 0xC6 0x99           |      1 | LATIN SMALL LETTER K WITH HOOK                         |\n",
      "| U+026F      | ɯ      | 0xC9 0xAF           |      1 | LATIN SMALL LETTER TURNED M                            |\n",
      "| U+0272      | ɲ      | 0xC9 0xB2           |      1 | LATIN SMALL LETTER N WITH LEFT HOOK                    |\n",
      "| U+0275      | ɵ      | 0xC9 0xB5           |      1 | LATIN SMALL LETTER BARRED O                            |\n",
      "| U+01A1      | ơ      | 0xC6 0xA1           |      1 | LATIN SMALL LETTER O WITH HORN                         |\n",
      "| U+01A3      | ƣ      | 0xC6 0xA3           |      1 | LATIN SMALL LETTER OI                                  |\n",
      "| U+01A5      | ƥ      | 0xC6 0xA5           |      1 | LATIN SMALL LETTER P WITH HOOK                         |\n",
      "| U+0280      | ʀ      | 0xCA 0x80           |      1 | LATIN LETTER SMALL CAPITAL R                           |\n",
      "| U+01A8      | ƨ      | 0xC6 0xA8           |      1 | LATIN SMALL LETTER TONE TWO                            |\n",
      "| U+0283      | ʃ      | 0xCA 0x83           |      1 | LATIN SMALL LETTER ESH                                 |\n",
      "| U+01AD      | ƭ      | 0xC6 0xAD           |      1 | LATIN SMALL LETTER T WITH HOOK                         |\n",
      "| U+0288      | ʈ      | 0xCA 0x88           |      1 | LATIN SMALL LETTER T WITH RETROFLEX HOOK               |\n",
      "| U+01B0      | ư      | 0xC6 0xB0           |      1 | LATIN SMALL LETTER U WITH HORN                         |\n",
      "| U+028A      | ʊ      | 0xCA 0x8A           |      1 | LATIN SMALL LETTER UPSILON                             |\n",
      "| U+028B      | ʋ      | 0xCA 0x8B           |      1 | LATIN SMALL LETTER V WITH HOOK                         |\n",
      "| U+01B4      | ƴ      | 0xC6 0xB4           |      1 | LATIN SMALL LETTER Y WITH HOOK                         |\n",
      "| U+01B6      | ƶ      | 0xC6 0xB6           |      1 | LATIN SMALL LETTER Z WITH STROKE                       |\n",
      "| U+0292      | ʒ      | 0xCA 0x92           |      1 | LATIN SMALL LETTER EZH                                 |\n",
      "| U+01B9      | ƹ      | 0xC6 0xB9           |      1 | LATIN SMALL LETTER EZH REVERSED                        |\n",
      "| U+01BD      | ƽ      | 0xC6 0xBD           |      1 | LATIN SMALL LETTER TONE FIVE                           |\n",
      "| U+01CE      | ǎ      | 0xC7 0x8E           |      1 | LATIN SMALL LETTER A WITH CARON                        |\n",
      "| U+01D0      | ǐ      | 0xC7 0x90           |      1 | LATIN SMALL LETTER I WITH CARON                        |\n",
      "| U+01D2      | ǒ      | 0xC7 0x92           |      1 | LATIN SMALL LETTER O WITH CARON                        |\n",
      "| U+01D4      | ǔ      | 0xC7 0x94           |      1 | LATIN SMALL LETTER U WITH CARON                        |\n",
      "| U+01D6      | ǖ      | 0xC7 0x96           |      1 | LATIN SMALL LETTER U WITH DIAERESIS AND MACRON         |\n",
      "| U+01D8      | ǘ      | 0xC7 0x98           |      1 | LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE          |\n",
      "| U+01DA      | ǚ      | 0xC7 0x9A           |      1 | LATIN SMALL LETTER U WITH DIAERESIS AND CARON          |\n",
      "| U+01DC      | ǜ      | 0xC7 0x9C           |      1 | LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE          |\n",
      "| U+01DF      | ǟ      | 0xC7 0x9F           |      1 | LATIN SMALL LETTER A WITH DIAERESIS AND MACRON         |\n",
      "| U+01E1      | ǡ      | 0xC7 0xA1           |      1 | LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON         |\n",
      "| U+01E3      | ǣ      | 0xC7 0xA3           |      1 | LATIN SMALL LETTER AE WITH MACRON                      |\n",
      "| U+01E5      | ǥ      | 0xC7 0xA5           |      1 | LATIN SMALL LETTER G WITH STROKE                       |\n",
      "| U+01E7      | ǧ      | 0xC7 0xA7           |      1 | LATIN SMALL LETTER G WITH CARON                        |\n",
      "| U+01E9      | ǩ      | 0xC7 0xA9           |      1 | LATIN SMALL LETTER K WITH CARON                        |\n",
      "| U+01EB      | ǫ      | 0xC7 0xAB           |      1 | LATIN SMALL LETTER O WITH OGONEK                       |\n",
      "| U+01ED      | ǭ      | 0xC7 0xAD           |      1 | LATIN SMALL LETTER O WITH OGONEK AND MACRON            |\n",
      "| U+01EF      | ǯ      | 0xC7 0xAF           |      1 | LATIN SMALL LETTER EZH WITH CARON                      |\n",
      "| U+030C      | ̌       | 0xCC 0x8C           |      1 | COMBINING CARON                                        |\n",
      "| U+01F5      | ǵ      | 0xC7 0xB5           |      1 | LATIN SMALL LETTER G WITH ACUTE                        |\n",
      "| U+0195      | ƕ      | 0xC6 0x95           |      1 | LATIN SMALL LETTER HV                                  |\n",
      "| U+01BF      | ƿ      | 0xC6 0xBF           |      1 | LATIN LETTER WYNN                                      |\n",
      "| U+01F9      | ǹ      | 0xC7 0xB9           |      1 | LATIN SMALL LETTER N WITH GRAVE                        |\n",
      "| U+01FB      | ǻ      | 0xC7 0xBB           |      1 | LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE         |\n",
      "| U+01FD      | ǽ      | 0xC7 0xBD           |      1 | LATIN SMALL LETTER AE WITH ACUTE                       |\n",
      "| U+01FF      | ǿ      | 0xC7 0xBF           |      1 | LATIN SMALL LETTER O WITH STROKE AND ACUTE             |\n",
      "| U+0201      | ȁ      | 0xC8 0x81           |      1 | LATIN SMALL LETTER A WITH DOUBLE GRAVE                 |\n",
      "| U+0203      | ȃ      | 0xC8 0x83           |      1 | LATIN SMALL LETTER A WITH INVERTED BREVE               |\n",
      "| U+0205      | ȅ      | 0xC8 0x85           |      1 | LATIN SMALL LETTER E WITH DOUBLE GRAVE                 |\n",
      "| U+0207      | ȇ      | 0xC8 0x87           |      1 | LATIN SMALL LETTER E WITH INVERTED BREVE               |\n",
      "| U+0209      | ȉ      | 0xC8 0x89           |      1 | LATIN SMALL LETTER I WITH DOUBLE GRAVE                 |\n",
      "| U+020B      | ȋ      | 0xC8 0x8B           |      1 | LATIN SMALL LETTER I WITH INVERTED BREVE               |\n",
      "| U+020D      | ȍ      | 0xC8 0x8D           |      1 | LATIN SMALL LETTER O WITH DOUBLE GRAVE                 |\n",
      "| U+020F      | ȏ      | 0xC8 0x8F           |      1 | LATIN SMALL LETTER O WITH INVERTED BREVE               |\n",
      "| U+0211      | ȑ      | 0xC8 0x91           |      1 | LATIN SMALL LETTER R WITH DOUBLE GRAVE                 |\n",
      "| U+0213      | ȓ      | 0xC8 0x93           |      1 | LATIN SMALL LETTER R WITH INVERTED BREVE               |\n",
      "| U+0215      | ȕ      | 0xC8 0x95           |      1 | LATIN SMALL LETTER U WITH DOUBLE GRAVE                 |\n",
      "| U+0217      | ȗ      | 0xC8 0x97           |      1 | LATIN SMALL LETTER U WITH INVERTED BREVE               |\n",
      "| U+0219      | ș      | 0xC8 0x99           |      1 | LATIN SMALL LETTER S WITH COMMA BELOW                  |\n",
      "| U+021B      | ț      | 0xC8 0x9B           |      1 | LATIN SMALL LETTER T WITH COMMA BELOW                  |\n",
      "| U+021D      | ȝ      | 0xC8 0x9D           |      1 | LATIN SMALL LETTER YOGH                                |\n",
      "| U+021F      | ȟ      | 0xC8 0x9F           |      1 | LATIN SMALL LETTER H WITH CARON                        |\n",
      "| U+019E      | ƞ      | 0xC6 0x9E           |      1 | LATIN SMALL LETTER N WITH LONG RIGHT LEG               |\n",
      "| U+0223      | ȣ      | 0xC8 0xA3           |      1 | LATIN SMALL LETTER OU                                  |\n",
      "| U+0225      | ȥ      | 0xC8 0xA5           |      1 | LATIN SMALL LETTER Z WITH HOOK                         |\n",
      "| U+0227      | ȧ      | 0xC8 0xA7           |      1 | LATIN SMALL LETTER A WITH DOT ABOVE                    |\n",
      "| U+0229      | ȩ      | 0xC8 0xA9           |      1 | LATIN SMALL LETTER E WITH CEDILLA                      |\n",
      "| U+022B      | ȫ      | 0xC8 0xAB           |      1 | LATIN SMALL LETTER O WITH DIAERESIS AND MACRON         |\n",
      "| U+022D      | ȭ      | 0xC8 0xAD           |      1 | LATIN SMALL LETTER O WITH TILDE AND MACRON             |\n",
      "| U+022F      | ȯ      | 0xC8 0xAF           |      1 | LATIN SMALL LETTER O WITH DOT ABOVE                    |\n",
      "| U+0231      | ȱ      | 0xC8 0xB1           |      1 | LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON         |\n",
      "| U+0233      | ȳ      | 0xC8 0xB3           |      1 | LATIN SMALL LETTER Y WITH MACRON                       |\n",
      "| U+2C65      | ⱥ      | 0xE2 0xB1 0xA5      |      1 | LATIN SMALL LETTER A WITH STROKE                       |\n",
      "| U+023C      | ȼ      | 0xC8 0xBC           |      1 | LATIN SMALL LETTER C WITH STROKE                       |\n",
      "| U+019A      | ƚ      | 0xC6 0x9A           |      1 | LATIN SMALL LETTER L WITH BAR                          |\n",
      "| U+2C66      | ⱦ      | 0xE2 0xB1 0xA6      |      1 | LATIN SMALL LETTER T WITH DIAGONAL STROKE              |\n",
      "| U+0242      | ɂ      | 0xC9 0x82           |      1 | LATIN SMALL LETTER GLOTTAL STOP                        |\n",
      "| U+0180      | ƀ      | 0xC6 0x80           |      1 | LATIN SMALL LETTER B WITH STROKE                       |\n",
      "| U+0289      | ʉ      | 0xCA 0x89           |      1 | LATIN SMALL LETTER U BAR                               |\n",
      "| U+028C      | ʌ      | 0xCA 0x8C           |      1 | LATIN SMALL LETTER TURNED V                            |\n",
      "| U+0247      | ɇ      | 0xC9 0x87           |      1 | LATIN SMALL LETTER E WITH STROKE                       |\n",
      "| U+0249      | ɉ      | 0xC9 0x89           |      1 | LATIN SMALL LETTER J WITH STROKE                       |\n",
      "| U+024B      | ɋ      | 0xC9 0x8B           |      1 | LATIN SMALL LETTER Q WITH HOOK TAIL                    |\n",
      "| U+024D      | ɍ      | 0xC9 0x8D           |      1 | LATIN SMALL LETTER R WITH STROKE                       |\n",
      "| U+024F      | ɏ      | 0xC9 0x8F           |      1 | LATIN SMALL LETTER Y WITH STROKE                       |\n",
      "| U+0371      | ͱ      | 0xCD 0xB1           |      1 | GREEK SMALL LETTER HETA                                |\n",
      "| U+0373      | ͳ      | 0xCD 0xB3           |      1 | GREEK SMALL LETTER ARCHAIC SAMPI                       |\n",
      "| U+0377      | ͷ      | 0xCD 0xB7           |      1 | GREEK SMALL LETTER PAMPHYLIAN DIGAMMA                  |\n",
      "| U+03F3      | ϳ      | 0xCF 0xB3           |      1 | GREEK LETTER YOT                                       |\n",
      "| U+03AD      | έ      | 0xCE 0xAD           |      1 | GREEK SMALL LETTER EPSILON WITH TONOS                  |\n",
      "| U+03AF      | ί      | 0xCE 0xAF           |      1 | GREEK SMALL LETTER IOTA WITH TONOS                     |\n",
      "| U+03CC      | ό      | 0xCF 0x8C           |      1 | GREEK SMALL LETTER OMICRON WITH TONOS                  |\n",
      "| U+03CD      | ύ      | 0xCF 0x8D           |      1 | GREEK SMALL LETTER UPSILON WITH TONOS                  |\n",
      "| U+03B3      | γ      | 0xCE 0xB3           |      1 | GREEK SMALL LETTER GAMMA                               |\n",
      "| U+03B4      | δ      | 0xCE 0xB4           |      1 | GREEK SMALL LETTER DELTA                               |\n",
      "| U+03B6      | ζ      | 0xCE 0xB6           |      1 | GREEK SMALL LETTER ZETA                                |\n",
      "| U+03BB      | λ      | 0xCE 0xBB           |      1 | GREEK SMALL LETTER LAMDA                               |\n",
      "| U+03BD      | ν      | 0xCE 0xBD           |      1 | GREEK SMALL LETTER NU                                  |\n",
      "| U+03BE      | ξ      | 0xCE 0xBE           |      1 | GREEK SMALL LETTER XI                                  |\n",
      "| U+03BF      | ο      | 0xCE 0xBF           |      1 | GREEK SMALL LETTER OMICRON                             |\n",
      "| U+03C4      | τ      | 0xCF 0x84           |      1 | GREEK SMALL LETTER TAU                                 |\n",
      "| U+03C7      | χ      | 0xCF 0x87           |      1 | GREEK SMALL LETTER CHI                                 |\n",
      "| U+03C8      | ψ      | 0xCF 0x88           |      1 | GREEK SMALL LETTER PSI                                 |\n",
      "| U+03CA      | ϊ      | 0xCF 0x8A           |      1 | GREEK SMALL LETTER IOTA WITH DIALYTIKA                 |\n",
      "| U+03CB      | ϋ      | 0xCF 0x8B           |      1 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA              |\n",
      "| U+03D7      | ϗ      | 0xCF 0x97           |      1 | GREEK KAI SYMBOL                                       |\n",
      "| U+03D9      | ϙ      | 0xCF 0x99           |      1 | GREEK SMALL LETTER ARCHAIC KOPPA                       |\n",
      "| U+03DB      | ϛ      | 0xCF 0x9B           |      1 | GREEK SMALL LETTER STIGMA                              |\n",
      "| U+03DD      | ϝ      | 0xCF 0x9D           |      1 | GREEK SMALL LETTER DIGAMMA                             |\n",
      "| U+03DF      | ϟ      | 0xCF 0x9F           |      1 | GREEK SMALL LETTER KOPPA                               |\n",
      "| U+03E1      | ϡ      | 0xCF 0xA1           |      1 | GREEK SMALL LETTER SAMPI                               |\n",
      "| U+03E3      | ϣ      | 0xCF 0xA3           |      1 | COPTIC SMALL LETTER SHEI                               |\n",
      "| U+03E5      | ϥ      | 0xCF 0xA5           |      1 | COPTIC SMALL LETTER FEI                                |\n",
      "| U+03E7      | ϧ      | 0xCF 0xA7           |      1 | COPTIC SMALL LETTER KHEI                               |\n",
      "| U+03E9      | ϩ      | 0xCF 0xA9           |      1 | COPTIC SMALL LETTER HORI                               |\n",
      "| U+03EB      | ϫ      | 0xCF 0xAB           |      1 | COPTIC SMALL LETTER GANGIA                             |\n",
      "| U+03ED      | ϭ      | 0xCF 0xAD           |      1 | COPTIC SMALL LETTER SHIMA                              |\n",
      "| U+03EF      | ϯ      | 0xCF 0xAF           |      1 | COPTIC SMALL LETTER DEI                                |\n",
      "| U+03F8      | ϸ      | 0xCF 0xB8           |      1 | GREEK SMALL LETTER SHO                                 |\n",
      "| U+03F2      | ϲ      | 0xCF 0xB2           |      1 | GREEK LUNATE SIGMA SYMBOL                              |\n",
      "| U+03FB      | ϻ      | 0xCF 0xBB           |      1 | GREEK SMALL LETTER SAN                                 |\n",
      "| U+037B      | ͻ      | 0xCD 0xBB           |      1 | GREEK SMALL REVERSED LUNATE SIGMA SYMBOL               |\n",
      "| U+037C      | ͼ      | 0xCD 0xBC           |      1 | GREEK SMALL DOTTED LUNATE SIGMA SYMBOL                 |\n",
      "| U+037D      | ͽ      | 0xCD 0xBD           |      1 | GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL        |\n",
      "| U+0450      | ѐ      | 0xD1 0x90           |      1 | CYRILLIC SMALL LETTER IE WITH GRAVE                    |\n",
      "| U+0451      | ё      | 0xD1 0x91           |      1 | CYRILLIC SMALL LETTER IO                               |\n",
      "| U+0452      | ђ      | 0xD1 0x92           |      1 | CYRILLIC SMALL LETTER DJE                              |\n",
      "| U+0453      | ѓ      | 0xD1 0x93           |      1 | CYRILLIC SMALL LETTER GJE                              |\n",
      "| U+0454      | є      | 0xD1 0x94           |      1 | CYRILLIC SMALL LETTER UKRAINIAN IE                     |\n",
      "| U+0455      | ѕ      | 0xD1 0x95           |      1 | CYRILLIC SMALL LETTER DZE                              |\n",
      "| U+0456      | і      | 0xD1 0x96           |      1 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I         |\n",
      "| U+0457      | ї      | 0xD1 0x97           |      1 | CYRILLIC SMALL LETTER YI                               |\n",
      "| U+0458      | ј      | 0xD1 0x98           |      1 | CYRILLIC SMALL LETTER JE                               |\n",
      "| U+0459      | љ      | 0xD1 0x99           |      1 | CYRILLIC SMALL LETTER LJE                              |\n",
      "| U+045A      | њ      | 0xD1 0x9A           |      1 | CYRILLIC SMALL LETTER NJE                              |\n",
      "| U+045B      | ћ      | 0xD1 0x9B           |      1 | CYRILLIC SMALL LETTER TSHE                             |\n",
      "| U+045C      | ќ      | 0xD1 0x9C           |      1 | CYRILLIC SMALL LETTER KJE                              |\n",
      "| U+045D      | ѝ      | 0xD1 0x9D           |      1 | CYRILLIC SMALL LETTER I WITH GRAVE                     |\n",
      "| U+045E      | ў      | 0xD1 0x9E           |      1 | CYRILLIC SMALL LETTER SHORT U                          |\n",
      "| U+045F      | џ      | 0xD1 0x9F           |      1 | CYRILLIC SMALL LETTER DZHE                             |\n",
      "| U+0430      | а      | 0xD0 0xB0           |      1 | CYRILLIC SMALL LETTER A                                |\n",
      "| U+0431      | б      | 0xD0 0xB1           |      1 | CYRILLIC SMALL LETTER BE                               |\n",
      "| U+0433      | г      | 0xD0 0xB3           |      1 | CYRILLIC SMALL LETTER GHE                              |\n",
      "| U+0435      | е      | 0xD0 0xB5           |      1 | CYRILLIC SMALL LETTER IE                               |\n",
      "| U+0436      | ж      | 0xD0 0xB6           |      1 | CYRILLIC SMALL LETTER ZHE                              |\n",
      "| U+0437      | з      | 0xD0 0xB7           |      1 | CYRILLIC SMALL LETTER ZE                               |\n",
      "| U+0438      | и      | 0xD0 0xB8           |      1 | CYRILLIC SMALL LETTER I                                |\n",
      "| U+0439      | й      | 0xD0 0xB9           |      1 | CYRILLIC SMALL LETTER SHORT I                          |\n",
      "| U+043A      | к      | 0xD0 0xBA           |      1 | CYRILLIC SMALL LETTER KA                               |\n",
      "| U+043B      | л      | 0xD0 0xBB           |      1 | CYRILLIC SMALL LETTER EL                               |\n",
      "| U+043C      | м      | 0xD0 0xBC           |      1 | CYRILLIC SMALL LETTER EM                               |\n",
      "| U+043D      | н      | 0xD0 0xBD           |      1 | CYRILLIC SMALL LETTER EN                               |\n",
      "| U+043F      | п      | 0xD0 0xBF           |      1 | CYRILLIC SMALL LETTER PE                               |\n",
      "| U+0440      | р      | 0xD1 0x80           |      1 | CYRILLIC SMALL LETTER ER                               |\n",
      "| U+0443      | у      | 0xD1 0x83           |      1 | CYRILLIC SMALL LETTER U                                |\n",
      "| U+0444      | ф      | 0xD1 0x84           |      1 | CYRILLIC SMALL LETTER EF                               |\n",
      "| U+0445      | х      | 0xD1 0x85           |      1 | CYRILLIC SMALL LETTER HA                               |\n",
      "| U+0446      | ц      | 0xD1 0x86           |      1 | CYRILLIC SMALL LETTER TSE                              |\n",
      "| U+0447      | ч      | 0xD1 0x87           |      1 | CYRILLIC SMALL LETTER CHE                              |\n",
      "| U+0448      | ш      | 0xD1 0x88           |      1 | CYRILLIC SMALL LETTER SHA                              |\n",
      "| U+0449      | щ      | 0xD1 0x89           |      1 | CYRILLIC SMALL LETTER SHCHA                            |\n",
      "| U+044B      | ы      | 0xD1 0x8B           |      1 | CYRILLIC SMALL LETTER YERU                             |\n",
      "| U+044C      | ь      | 0xD1 0x8C           |      1 | CYRILLIC SMALL LETTER SOFT SIGN                        |\n",
      "| U+044D      | э      | 0xD1 0x8D           |      1 | CYRILLIC SMALL LETTER E                                |\n",
      "| U+044E      | ю      | 0xD1 0x8E           |      1 | CYRILLIC SMALL LETTER YU                               |\n",
      "| U+044F      | я      | 0xD1 0x8F           |      1 | CYRILLIC SMALL LETTER YA                               |\n",
      "| U+0461      | ѡ      | 0xD1 0xA1           |      1 | CYRILLIC SMALL LETTER OMEGA                            |\n",
      "| U+0465      | ѥ      | 0xD1 0xA5           |      1 | CYRILLIC SMALL LETTER IOTIFIED E                       |\n",
      "| U+0467      | ѧ      | 0xD1 0xA7           |      1 | CYRILLIC SMALL LETTER LITTLE YUS                       |\n",
      "| U+0469      | ѩ      | 0xD1 0xA9           |      1 | CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS              |\n",
      "| U+046B      | ѫ      | 0xD1 0xAB           |      1 | CYRILLIC SMALL LETTER BIG YUS                          |\n",
      "| U+046D      | ѭ      | 0xD1 0xAD           |      1 | CYRILLIC SMALL LETTER IOTIFIED BIG YUS                 |\n",
      "| U+046F      | ѯ      | 0xD1 0xAF           |      1 | CYRILLIC SMALL LETTER KSI                              |\n",
      "| U+0471      | ѱ      | 0xD1 0xB1           |      1 | CYRILLIC SMALL LETTER PSI                              |\n",
      "| U+0473      | ѳ      | 0xD1 0xB3           |      1 | CYRILLIC SMALL LETTER FITA                             |\n",
      "| U+0475      | ѵ      | 0xD1 0xB5           |      1 | CYRILLIC SMALL LETTER IZHITSA                          |\n",
      "| U+0477      | ѷ      | 0xD1 0xB7           |      1 | CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT |\n",
      "| U+0479      | ѹ      | 0xD1 0xB9           |      1 | CYRILLIC SMALL LETTER UK                               |\n",
      "| U+047B      | ѻ      | 0xD1 0xBB           |      1 | CYRILLIC SMALL LETTER ROUND OMEGA                      |\n",
      "| U+047D      | ѽ      | 0xD1 0xBD           |      1 | CYRILLIC SMALL LETTER OMEGA WITH TITLO                 |\n",
      "| U+047F      | ѿ      | 0xD1 0xBF           |      1 | CYRILLIC SMALL LETTER OT                               |\n",
      "| U+0481      | ҁ      | 0xD2 0x81           |      1 | CYRILLIC SMALL LETTER KOPPA                            |\n",
      "| U+048B      | ҋ      | 0xD2 0x8B           |      1 | CYRILLIC SMALL LETTER SHORT I WITH TAIL                |\n",
      "| U+048D      | ҍ      | 0xD2 0x8D           |      1 | CYRILLIC SMALL LETTER SEMISOFT SIGN                    |\n",
      "| U+048F      | ҏ      | 0xD2 0x8F           |      1 | CYRILLIC SMALL LETTER ER WITH TICK                     |\n",
      "| U+0491      | ґ      | 0xD2 0x91           |      1 | CYRILLIC SMALL LETTER GHE WITH UPTURN                  |\n",
      "| U+0493      | ғ      | 0xD2 0x93           |      1 | CYRILLIC SMALL LETTER GHE WITH STROKE                  |\n",
      "| U+0495      | ҕ      | 0xD2 0x95           |      1 | CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK             |\n",
      "| U+0497      | җ      | 0xD2 0x97           |      1 | CYRILLIC SMALL LETTER ZHE WITH DESCENDER               |\n",
      "| U+0499      | ҙ      | 0xD2 0x99           |      1 | CYRILLIC SMALL LETTER ZE WITH DESCENDER                |\n",
      "| U+049B      | қ      | 0xD2 0x9B           |      1 | CYRILLIC SMALL LETTER KA WITH DESCENDER                |\n",
      "| U+049D      | ҝ      | 0xD2 0x9D           |      1 | CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE          |\n",
      "| U+049F      | ҟ      | 0xD2 0x9F           |      1 | CYRILLIC SMALL LETTER KA WITH STROKE                   |\n",
      "| U+04A1      | ҡ      | 0xD2 0xA1           |      1 | CYRILLIC SMALL LETTER BASHKIR KA                       |\n",
      "| U+04A3      | ң      | 0xD2 0xA3           |      1 | CYRILLIC SMALL LETTER EN WITH DESCENDER                |\n",
      "| U+04A5      | ҥ      | 0xD2 0xA5           |      1 | CYRILLIC SMALL LIGATURE EN GHE                         |\n",
      "| U+04A7      | ҧ      | 0xD2 0xA7           |      1 | CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK              |\n",
      "| U+04A9      | ҩ      | 0xD2 0xA9           |      1 | CYRILLIC SMALL LETTER ABKHASIAN HA                     |\n",
      "| U+04AB      | ҫ      | 0xD2 0xAB           |      1 | CYRILLIC SMALL LETTER ES WITH DESCENDER                |\n",
      "| U+04AD      | ҭ      | 0xD2 0xAD           |      1 | CYRILLIC SMALL LETTER TE WITH DESCENDER                |\n",
      "| U+04AF      | ү      | 0xD2 0xAF           |      1 | CYRILLIC SMALL LETTER STRAIGHT U                       |\n",
      "| U+04B1      | ұ      | 0xD2 0xB1           |      1 | CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE           |\n",
      "| U+04B3      | ҳ      | 0xD2 0xB3           |      1 | CYRILLIC SMALL LETTER HA WITH DESCENDER                |\n",
      "| U+04B5      | ҵ      | 0xD2 0xB5           |      1 | CYRILLIC SMALL LIGATURE TE TSE                         |\n",
      "| U+04B7      | ҷ      | 0xD2 0xB7           |      1 | CYRILLIC SMALL LETTER CHE WITH DESCENDER               |\n",
      "| U+04B9      | ҹ      | 0xD2 0xB9           |      1 | CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE         |\n",
      "| U+04BB      | һ      | 0xD2 0xBB           |      1 | CYRILLIC SMALL LETTER SHHA                             |\n",
      "| U+04BD      | ҽ      | 0xD2 0xBD           |      1 | CYRILLIC SMALL LETTER ABKHASIAN CHE                    |\n",
      "| U+04BF      | ҿ      | 0xD2 0xBF           |      1 | CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER     |\n",
      "| U+04CF      | ӏ      | 0xD3 0x8F           |      1 | CYRILLIC SMALL LETTER PALOCHKA                         |\n",
      "| U+04C2      | ӂ      | 0xD3 0x82           |      1 | CYRILLIC SMALL LETTER ZHE WITH BREVE                   |\n",
      "| U+04C4      | ӄ      | 0xD3 0x84           |      1 | CYRILLIC SMALL LETTER KA WITH HOOK                     |\n",
      "| U+04C6      | ӆ      | 0xD3 0x86           |      1 | CYRILLIC SMALL LETTER EL WITH TAIL                     |\n",
      "| U+04C8      | ӈ      | 0xD3 0x88           |      1 | CYRILLIC SMALL LETTER EN WITH HOOK                     |\n",
      "| U+04CA      | ӊ      | 0xD3 0x8A           |      1 | CYRILLIC SMALL LETTER EN WITH TAIL                     |\n",
      "| U+04CC      | ӌ      | 0xD3 0x8C           |      1 | CYRILLIC SMALL LETTER KHAKASSIAN CHE                   |\n",
      "| U+04CE      | ӎ      | 0xD3 0x8E           |      1 | CYRILLIC SMALL LETTER EM WITH TAIL                     |\n",
      "| U+04D1      | ӑ      | 0xD3 0x91           |      1 | CYRILLIC SMALL LETTER A WITH BREVE                     |\n",
      "| U+04D3      | ӓ      | 0xD3 0x93           |      1 | CYRILLIC SMALL LETTER A WITH DIAERESIS                 |\n",
      "| U+04D5      | ӕ      | 0xD3 0x95           |      1 | CYRILLIC SMALL LIGATURE A IE                           |\n",
      "| U+04D7      | ӗ      | 0xD3 0x97           |      1 | CYRILLIC SMALL LETTER IE WITH BREVE                    |\n",
      "| U+04D9      | ә      | 0xD3 0x99           |      1 | CYRILLIC SMALL LETTER SCHWA                            |\n",
      "| U+04DB      | ӛ      | 0xD3 0x9B           |      1 | CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS             |\n",
      "| U+04DD      | ӝ      | 0xD3 0x9D           |      1 | CYRILLIC SMALL LETTER ZHE WITH DIAERESIS               |\n",
      "| U+04DF      | ӟ      | 0xD3 0x9F           |      1 | CYRILLIC SMALL LETTER ZE WITH DIAERESIS                |\n",
      "| U+04E1      | ӡ      | 0xD3 0xA1           |      1 | CYRILLIC SMALL LETTER ABKHASIAN DZE                    |\n",
      "| U+04E3      | ӣ      | 0xD3 0xA3           |      1 | CYRILLIC SMALL LETTER I WITH MACRON                    |\n",
      "| U+04E5      | ӥ      | 0xD3 0xA5           |      1 | CYRILLIC SMALL LETTER I WITH DIAERESIS                 |\n",
      "| U+04E7      | ӧ      | 0xD3 0xA7           |      1 | CYRILLIC SMALL LETTER O WITH DIAERESIS                 |\n",
      "| U+04E9      | ө      | 0xD3 0xA9           |      1 | CYRILLIC SMALL LETTER BARRED O                         |\n",
      "| U+04EB      | ӫ      | 0xD3 0xAB           |      1 | CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS          |\n",
      "| U+04ED      | ӭ      | 0xD3 0xAD           |      1 | CYRILLIC SMALL LETTER E WITH DIAERESIS                 |\n",
      "| U+04EF      | ӯ      | 0xD3 0xAF           |      1 | CYRILLIC SMALL LETTER U WITH MACRON                    |\n",
      "| U+04F1      | ӱ      | 0xD3 0xB1           |      1 | CYRILLIC SMALL LETTER U WITH DIAERESIS                 |\n",
      "| U+04F3      | ӳ      | 0xD3 0xB3           |      1 | CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE              |\n",
      "| U+04F5      | ӵ      | 0xD3 0xB5           |      1 | CYRILLIC SMALL LETTER CHE WITH DIAERESIS               |\n",
      "| U+04F7      | ӷ      | 0xD3 0xB7           |      1 | CYRILLIC SMALL LETTER GHE WITH DESCENDER               |\n",
      "| U+04F9      | ӹ      | 0xD3 0xB9           |      1 | CYRILLIC SMALL LETTER YERU WITH DIAERESIS              |\n",
      "| U+04FB      | ӻ      | 0xD3 0xBB           |      1 | CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK         |\n",
      "| U+04FD      | ӽ      | 0xD3 0xBD           |      1 | CYRILLIC SMALL LETTER HA WITH HOOK                     |\n",
      "| U+04FF      | ӿ      | 0xD3 0xBF           |      1 | CYRILLIC SMALL LETTER HA WITH STROKE                   |\n",
      "| U+0501      | ԁ      | 0xD4 0x81           |      1 | CYRILLIC SMALL LETTER KOMI DE                          |\n",
      "| U+0503      | ԃ      | 0xD4 0x83           |      1 | CYRILLIC SMALL LETTER KOMI DJE                         |\n",
      "| U+0505      | ԅ      | 0xD4 0x85           |      1 | CYRILLIC SMALL LETTER KOMI ZJE                         |\n",
      "| U+0507      | ԇ      | 0xD4 0x87           |      1 | CYRILLIC SMALL LETTER KOMI DZJE                        |\n",
      "| U+0509      | ԉ      | 0xD4 0x89           |      1 | CYRILLIC SMALL LETTER KOMI LJE                         |\n",
      "| U+050B      | ԋ      | 0xD4 0x8B           |      1 | CYRILLIC SMALL LETTER KOMI NJE                         |\n",
      "| U+050D      | ԍ      | 0xD4 0x8D           |      1 | CYRILLIC SMALL LETTER KOMI SJE                         |\n",
      "| U+050F      | ԏ      | 0xD4 0x8F           |      1 | CYRILLIC SMALL LETTER KOMI TJE                         |\n",
      "| U+0511      | ԑ      | 0xD4 0x91           |      1 | CYRILLIC SMALL LETTER REVERSED ZE                      |\n",
      "| U+0513      | ԓ      | 0xD4 0x93           |      1 | CYRILLIC SMALL LETTER EL WITH HOOK                     |\n",
      "| U+0515      | ԕ      | 0xD4 0x95           |      1 | CYRILLIC SMALL LETTER LHA                              |\n",
      "| U+0517      | ԗ      | 0xD4 0x97           |      1 | CYRILLIC SMALL LETTER RHA                              |\n",
      "| U+0519      | ԙ      | 0xD4 0x99           |      1 | CYRILLIC SMALL LETTER YAE                              |\n",
      "| U+051B      | ԛ      | 0xD4 0x9B           |      1 | CYRILLIC SMALL LETTER QA                               |\n",
      "| U+051D      | ԝ      | 0xD4 0x9D           |      1 | CYRILLIC SMALL LETTER WE                               |\n",
      "| U+051F      | ԟ      | 0xD4 0x9F           |      1 | CYRILLIC SMALL LETTER ALEUT KA                         |\n",
      "| U+0521      | ԡ      | 0xD4 0xA1           |      1 | CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK              |\n",
      "| U+0523      | ԣ      | 0xD4 0xA3           |      1 | CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK              |\n",
      "| U+0525      | ԥ      | 0xD4 0xA5           |      1 | CYRILLIC SMALL LETTER PE WITH DESCENDER                |\n",
      "| U+0527      | ԧ      | 0xD4 0xA7           |      1 | CYRILLIC SMALL LETTER SHHA WITH DESCENDER              |\n",
      "| U+0529      | ԩ      | 0xD4 0xA9           |      1 | CYRILLIC SMALL LETTER EN WITH LEFT HOOK                |\n",
      "| U+052B      | ԫ      | 0xD4 0xAB           |      1 | CYRILLIC SMALL LETTER DZZHE                            |\n",
      "| U+052D      | ԭ      | 0xD4 0xAD           |      1 | CYRILLIC SMALL LETTER DCHE                             |\n",
      "| U+052F      | ԯ      | 0xD4 0xAF           |      1 | CYRILLIC SMALL LETTER EL WITH DESCENDER                |\n",
      "| U+0561      | ա      | 0xD5 0xA1           |      1 | ARMENIAN SMALL LETTER AYB                              |\n",
      "| U+0562      | բ      | 0xD5 0xA2           |      1 | ARMENIAN SMALL LETTER BEN                              |\n",
      "| U+0563      | գ      | 0xD5 0xA3           |      1 | ARMENIAN SMALL LETTER GIM                              |\n",
      "| U+0564      | դ      | 0xD5 0xA4           |      1 | ARMENIAN SMALL LETTER DA                               |\n",
      "| U+0566      | զ      | 0xD5 0xA6           |      1 | ARMENIAN SMALL LETTER ZA                               |\n",
      "| U+0567      | է      | 0xD5 0xA7           |      1 | ARMENIAN SMALL LETTER EH                               |\n",
      "| U+0568      | ը      | 0xD5 0xA8           |      1 | ARMENIAN SMALL LETTER ET                               |\n",
      "| U+0569      | թ      | 0xD5 0xA9           |      1 | ARMENIAN SMALL LETTER TO                               |\n",
      "| U+056A      | ժ      | 0xD5 0xAA           |      1 | ARMENIAN SMALL LETTER ZHE                              |\n",
      "| U+056C      | լ      | 0xD5 0xAC           |      1 | ARMENIAN SMALL LETTER LIWN                             |\n",
      "| U+056E      | ծ      | 0xD5 0xAE           |      1 | ARMENIAN SMALL LETTER CA                               |\n",
      "| U+056F      | կ      | 0xD5 0xAF           |      1 | ARMENIAN SMALL LETTER KEN                              |\n",
      "| U+0570      | հ      | 0xD5 0xB0           |      1 | ARMENIAN SMALL LETTER HO                               |\n",
      "| U+0571      | ձ      | 0xD5 0xB1           |      1 | ARMENIAN SMALL LETTER JA                               |\n",
      "| U+0572      | ղ      | 0xD5 0xB2           |      1 | ARMENIAN SMALL LETTER GHAD                             |\n",
      "| U+0573      | ճ      | 0xD5 0xB3           |      1 | ARMENIAN SMALL LETTER CHEH                             |\n",
      "| U+0575      | յ      | 0xD5 0xB5           |      1 | ARMENIAN SMALL LETTER YI                               |\n",
      "| U+0577      | շ      | 0xD5 0xB7           |      1 | ARMENIAN SMALL LETTER SHA                              |\n",
      "| U+0578      | ո      | 0xD5 0xB8           |      1 | ARMENIAN SMALL LETTER VO                               |\n",
      "| U+0579      | չ      | 0xD5 0xB9           |      1 | ARMENIAN SMALL LETTER CHA                              |\n",
      "| U+057A      | պ      | 0xD5 0xBA           |      1 | ARMENIAN SMALL LETTER PEH                              |\n",
      "| U+057B      | ջ      | 0xD5 0xBB           |      1 | ARMENIAN SMALL LETTER JHEH                             |\n",
      "| U+057C      | ռ      | 0xD5 0xBC           |      1 | ARMENIAN SMALL LETTER RA                               |\n",
      "| U+057D      | ս      | 0xD5 0xBD           |      1 | ARMENIAN SMALL LETTER SEH                              |\n",
      "| U+057F      | տ      | 0xD5 0xBF           |      1 | ARMENIAN SMALL LETTER TIWN                             |\n",
      "| U+0580      | ր      | 0xD6 0x80           |      1 | ARMENIAN SMALL LETTER REH                              |\n",
      "| U+0581      | ց      | 0xD6 0x81           |      1 | ARMENIAN SMALL LETTER CO                               |\n",
      "| U+0583      | փ      | 0xD6 0x83           |      1 | ARMENIAN SMALL LETTER PIWR                             |\n",
      "| U+0584      | ք      | 0xD6 0x84           |      1 | ARMENIAN SMALL LETTER KEH                              |\n",
      "| U+0585      | օ      | 0xD6 0x85           |      1 | ARMENIAN SMALL LETTER OH                               |\n",
      "| U+0586      | ֆ      | 0xD6 0x86           |      1 | ARMENIAN SMALL LETTER FEH                              |\n",
      "| U+2D00      | ⴀ      | 0xE2 0xB4 0x80      |      1 | GEORGIAN SMALL LETTER AN                               |\n",
      "| U+2D01      | ⴁ      | 0xE2 0xB4 0x81      |      1 | GEORGIAN SMALL LETTER BAN                              |\n",
      "| U+2D02      | ⴂ      | 0xE2 0xB4 0x82      |      1 | GEORGIAN SMALL LETTER GAN                              |\n",
      "| U+2D03      | ⴃ      | 0xE2 0xB4 0x83      |      1 | GEORGIAN SMALL LETTER DON                              |\n",
      "| U+2D04      | ⴄ      | 0xE2 0xB4 0x84      |      1 | GEORGIAN SMALL LETTER EN                               |\n",
      "| U+2D05      | ⴅ      | 0xE2 0xB4 0x85      |      1 | GEORGIAN SMALL LETTER VIN                              |\n",
      "| U+2D06      | ⴆ      | 0xE2 0xB4 0x86      |      1 | GEORGIAN SMALL LETTER ZEN                              |\n",
      "| U+2D07      | ⴇ      | 0xE2 0xB4 0x87      |      1 | GEORGIAN SMALL LETTER TAN                              |\n",
      "| U+2D08      | ⴈ      | 0xE2 0xB4 0x88      |      1 | GEORGIAN SMALL LETTER IN                               |\n",
      "| U+2D09      | ⴉ      | 0xE2 0xB4 0x89      |      1 | GEORGIAN SMALL LETTER KAN                              |\n",
      "| U+2D0A      | ⴊ      | 0xE2 0xB4 0x8A      |      1 | GEORGIAN SMALL LETTER LAS                              |\n",
      "| U+2D0B      | ⴋ      | 0xE2 0xB4 0x8B      |      1 | GEORGIAN SMALL LETTER MAN                              |\n",
      "| U+2D0C      | ⴌ      | 0xE2 0xB4 0x8C      |      1 | GEORGIAN SMALL LETTER NAR                              |\n",
      "| U+2D0D      | ⴍ      | 0xE2 0xB4 0x8D      |      1 | GEORGIAN SMALL LETTER ON                               |\n",
      "| U+2D0E      | ⴎ      | 0xE2 0xB4 0x8E      |      1 | GEORGIAN SMALL LETTER PAR                              |\n",
      "| U+2D0F      | ⴏ      | 0xE2 0xB4 0x8F      |      1 | GEORGIAN SMALL LETTER ZHAR                             |\n",
      "| U+2D10      | ⴐ      | 0xE2 0xB4 0x90      |      1 | GEORGIAN SMALL LETTER RAE                              |\n",
      "| U+2D11      | ⴑ      | 0xE2 0xB4 0x91      |      1 | GEORGIAN SMALL LETTER SAN                              |\n",
      "| U+2D12      | ⴒ      | 0xE2 0xB4 0x92      |      1 | GEORGIAN SMALL LETTER TAR                              |\n",
      "| U+2D13      | ⴓ      | 0xE2 0xB4 0x93      |      1 | GEORGIAN SMALL LETTER UN                               |\n",
      "| U+2D14      | ⴔ      | 0xE2 0xB4 0x94      |      1 | GEORGIAN SMALL LETTER PHAR                             |\n",
      "| U+2D15      | ⴕ      | 0xE2 0xB4 0x95      |      1 | GEORGIAN SMALL LETTER KHAR                             |\n",
      "| U+2D16      | ⴖ      | 0xE2 0xB4 0x96      |      1 | GEORGIAN SMALL LETTER GHAN                             |\n",
      "| U+2D17      | ⴗ      | 0xE2 0xB4 0x97      |      1 | GEORGIAN SMALL LETTER QAR                              |\n",
      "| U+2D18      | ⴘ      | 0xE2 0xB4 0x98      |      1 | GEORGIAN SMALL LETTER SHIN                             |\n",
      "| U+2D19      | ⴙ      | 0xE2 0xB4 0x99      |      1 | GEORGIAN SMALL LETTER CHIN                             |\n",
      "| U+2D1A      | ⴚ      | 0xE2 0xB4 0x9A      |      1 | GEORGIAN SMALL LETTER CAN                              |\n",
      "| U+2D1B      | ⴛ      | 0xE2 0xB4 0x9B      |      1 | GEORGIAN SMALL LETTER JIL                              |\n",
      "| U+2D1C      | ⴜ      | 0xE2 0xB4 0x9C      |      1 | GEORGIAN SMALL LETTER CIL                              |\n",
      "| U+2D1D      | ⴝ      | 0xE2 0xB4 0x9D      |      1 | GEORGIAN SMALL LETTER CHAR                             |\n",
      "| U+2D1E      | ⴞ      | 0xE2 0xB4 0x9E      |      1 | GEORGIAN SMALL LETTER XAN                              |\n",
      "| U+2D1F      | ⴟ      | 0xE2 0xB4 0x9F      |      1 | GEORGIAN SMALL LETTER JHAN                             |\n",
      "| U+2D20      | ⴠ      | 0xE2 0xB4 0xA0      |      1 | GEORGIAN SMALL LETTER HAE                              |\n",
      "| U+2D21      | ⴡ      | 0xE2 0xB4 0xA1      |      1 | GEORGIAN SMALL LETTER HE                               |\n",
      "| U+2D22      | ⴢ      | 0xE2 0xB4 0xA2      |      1 | GEORGIAN SMALL LETTER HIE                              |\n",
      "| U+2D23      | ⴣ      | 0xE2 0xB4 0xA3      |      1 | GEORGIAN SMALL LETTER WE                               |\n",
      "| U+2D24      | ⴤ      | 0xE2 0xB4 0xA4      |      1 | GEORGIAN SMALL LETTER HAR                              |\n",
      "| U+2D25      | ⴥ      | 0xE2 0xB4 0xA5      |      1 | GEORGIAN SMALL LETTER HOE                              |\n",
      "| U+2D27      | ⴧ      | 0xE2 0xB4 0xA7      |      1 | GEORGIAN SMALL LETTER YN                               |\n",
      "| U+2D2D      | ⴭ      | 0xE2 0xB4 0xAD      |      1 | GEORGIAN SMALL LETTER AEN                              |\n",
      "| U+13F0      | Ᏸ      | 0xE1 0x8F 0xB0      |      1 | CHEROKEE LETTER YE                                     |\n",
      "| U+13F1      | Ᏹ      | 0xE1 0x8F 0xB1      |      1 | CHEROKEE LETTER YI                                     |\n",
      "| U+13F2      | Ᏺ      | 0xE1 0x8F 0xB2      |      1 | CHEROKEE LETTER YO                                     |\n",
      "| U+13F3      | Ᏻ      | 0xE1 0x8F 0xB3      |      1 | CHEROKEE LETTER YU                                     |\n",
      "| U+13F4      | Ᏼ      | 0xE1 0x8F 0xB4      |      1 | CHEROKEE LETTER YV                                     |\n",
      "| U+13F5      | Ᏽ      | 0xE1 0x8F 0xB5      |      1 | CHEROKEE LETTER MV                                     |\n",
      "| U+1C8A      | ᲊ      | 0xE1 0xB2 0x8A      |      1 |                                                        |\n",
      "| U+10D0      | ა      | 0xE1 0x83 0x90      |      1 | GEORGIAN LETTER AN                                     |\n",
      "| U+10D1      | ბ      | 0xE1 0x83 0x91      |      1 | GEORGIAN LETTER BAN                                    |\n",
      "| U+10D2      | გ      | 0xE1 0x83 0x92      |      1 | GEORGIAN LETTER GAN                                    |\n",
      "| U+10D3      | დ      | 0xE1 0x83 0x93      |      1 | GEORGIAN LETTER DON                                    |\n",
      "| U+10D4      | ე      | 0xE1 0x83 0x94      |      1 | GEORGIAN LETTER EN                                     |\n",
      "| U+10D5      | ვ      | 0xE1 0x83 0x95      |      1 | GEORGIAN LETTER VIN                                    |\n",
      "| U+10D6      | ზ      | 0xE1 0x83 0x96      |      1 | GEORGIAN LETTER ZEN                                    |\n",
      "| U+10D7      | თ      | 0xE1 0x83 0x97      |      1 | GEORGIAN LETTER TAN                                    |\n",
      "| U+10D8      | ი      | 0xE1 0x83 0x98      |      1 | GEORGIAN LETTER IN                                     |\n",
      "| U+10D9      | კ      | 0xE1 0x83 0x99      |      1 | GEORGIAN LETTER KAN                                    |\n",
      "| U+10DA      | ლ      | 0xE1 0x83 0x9A      |      1 | GEORGIAN LETTER LAS                                    |\n",
      "| U+10DB      | მ      | 0xE1 0x83 0x9B      |      1 | GEORGIAN LETTER MAN                                    |\n",
      "| U+10DC      | ნ      | 0xE1 0x83 0x9C      |      1 | GEORGIAN LETTER NAR                                    |\n",
      "| U+10DD      | ო      | 0xE1 0x83 0x9D      |      1 | GEORGIAN LETTER ON                                     |\n",
      "| U+10DE      | პ      | 0xE1 0x83 0x9E      |      1 | GEORGIAN LETTER PAR                                    |\n",
      "| U+10DF      | ჟ      | 0xE1 0x83 0x9F      |      1 | GEORGIAN LETTER ZHAR                                   |\n",
      "| U+10E0      | რ      | 0xE1 0x83 0xA0      |      1 | GEORGIAN LETTER RAE                                    |\n",
      "| U+10E1      | ს      | 0xE1 0x83 0xA1      |      1 | GEORGIAN LETTER SAN                                    |\n",
      "| U+10E2      | ტ      | 0xE1 0x83 0xA2      |      1 | GEORGIAN LETTER TAR                                    |\n",
      "| U+10E3      | უ      | 0xE1 0x83 0xA3      |      1 | GEORGIAN LETTER UN                                     |\n",
      "| U+10E4      | ფ      | 0xE1 0x83 0xA4      |      1 | GEORGIAN LETTER PHAR                                   |\n",
      "| U+10E5      | ქ      | 0xE1 0x83 0xA5      |      1 | GEORGIAN LETTER KHAR                                   |\n",
      "| U+10E6      | ღ      | 0xE1 0x83 0xA6      |      1 | GEORGIAN LETTER GHAN                                   |\n",
      "| U+10E7      | ყ      | 0xE1 0x83 0xA7      |      1 | GEORGIAN LETTER QAR                                    |\n",
      "| U+10E8      | შ      | 0xE1 0x83 0xA8      |      1 | GEORGIAN LETTER SHIN                                   |\n",
      "| U+10E9      | ჩ      | 0xE1 0x83 0xA9      |      1 | GEORGIAN LETTER CHIN                                   |\n",
      "| U+10EA      | ც      | 0xE1 0x83 0xAA      |      1 | GEORGIAN LETTER CAN                                    |\n",
      "| U+10EB      | ძ      | 0xE1 0x83 0xAB      |      1 | GEORGIAN LETTER JIL                                    |\n",
      "| U+10EC      | წ      | 0xE1 0x83 0xAC      |      1 | GEORGIAN LETTER CIL                                    |\n",
      "| U+10ED      | ჭ      | 0xE1 0x83 0xAD      |      1 | GEORGIAN LETTER CHAR                                   |\n",
      "| U+10EE      | ხ      | 0xE1 0x83 0xAE      |      1 | GEORGIAN LETTER XAN                                    |\n",
      "| U+10EF      | ჯ      | 0xE1 0x83 0xAF      |      1 | GEORGIAN LETTER JHAN                                   |\n",
      "| U+10F0      | ჰ      | 0xE1 0x83 0xB0      |      1 | GEORGIAN LETTER HAE                                    |\n",
      "| U+10F1      | ჱ      | 0xE1 0x83 0xB1      |      1 | GEORGIAN LETTER HE                                     |\n",
      "| U+10F2      | ჲ      | 0xE1 0x83 0xB2      |      1 | GEORGIAN LETTER HIE                                    |\n",
      "| U+10F3      | ჳ      | 0xE1 0x83 0xB3      |      1 | GEORGIAN LETTER WE                                     |\n",
      "| U+10F4      | ჴ      | 0xE1 0x83 0xB4      |      1 | GEORGIAN LETTER HAR                                    |\n",
      "| U+10F5      | ჵ      | 0xE1 0x83 0xB5      |      1 | GEORGIAN LETTER HOE                                    |\n",
      "| U+10F6      | ჶ      | 0xE1 0x83 0xB6      |      1 | GEORGIAN LETTER FI                                     |\n",
      "| U+10F7      | ჷ      | 0xE1 0x83 0xB7      |      1 | GEORGIAN LETTER YN                                     |\n",
      "| U+10F8      | ჸ      | 0xE1 0x83 0xB8      |      1 | GEORGIAN LETTER ELIFI                                  |\n",
      "| U+10F9      | ჹ      | 0xE1 0x83 0xB9      |      1 | GEORGIAN LETTER TURNED GAN                             |\n",
      "| U+10FA      | ჺ      | 0xE1 0x83 0xBA      |      1 | GEORGIAN LETTER AIN                                    |\n",
      "| U+10FD      | ჽ      | 0xE1 0x83 0xBD      |      1 | GEORGIAN LETTER AEN                                    |\n",
      "| U+10FE      | ჾ      | 0xE1 0x83 0xBE      |      1 | GEORGIAN LETTER HARD SIGN                              |\n",
      "| U+10FF      | ჿ      | 0xE1 0x83 0xBF      |      1 | GEORGIAN LETTER LABIAL SIGN                            |\n",
      "| U+1E01      | ḁ      | 0xE1 0xB8 0x81      |      1 | LATIN SMALL LETTER A WITH RING BELOW                   |\n",
      "| U+1E03      | ḃ      | 0xE1 0xB8 0x83      |      1 | LATIN SMALL LETTER B WITH DOT ABOVE                    |\n",
      "| U+1E05      | ḅ      | 0xE1 0xB8 0x85      |      1 | LATIN SMALL LETTER B WITH DOT BELOW                    |\n",
      "| U+1E07      | ḇ      | 0xE1 0xB8 0x87      |      1 | LATIN SMALL LETTER B WITH LINE BELOW                   |\n",
      "| U+1E09      | ḉ      | 0xE1 0xB8 0x89      |      1 | LATIN SMALL LETTER C WITH CEDILLA AND ACUTE            |\n",
      "| U+1E0B      | ḋ      | 0xE1 0xB8 0x8B      |      1 | LATIN SMALL LETTER D WITH DOT ABOVE                    |\n",
      "| U+1E0D      | ḍ      | 0xE1 0xB8 0x8D      |      1 | LATIN SMALL LETTER D WITH DOT BELOW                    |\n",
      "| U+1E0F      | ḏ      | 0xE1 0xB8 0x8F      |      1 | LATIN SMALL LETTER D WITH LINE BELOW                   |\n",
      "| U+1E11      | ḑ      | 0xE1 0xB8 0x91      |      1 | LATIN SMALL LETTER D WITH CEDILLA                      |\n",
      "| U+1E13      | ḓ      | 0xE1 0xB8 0x93      |      1 | LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW             |\n",
      "| U+1E15      | ḕ      | 0xE1 0xB8 0x95      |      1 | LATIN SMALL LETTER E WITH MACRON AND GRAVE             |\n",
      "| U+1E17      | ḗ      | 0xE1 0xB8 0x97      |      1 | LATIN SMALL LETTER E WITH MACRON AND ACUTE             |\n",
      "| U+1E19      | ḙ      | 0xE1 0xB8 0x99      |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW             |\n",
      "| U+1E1B      | ḛ      | 0xE1 0xB8 0x9B      |      1 | LATIN SMALL LETTER E WITH TILDE BELOW                  |\n",
      "| U+1E1D      | ḝ      | 0xE1 0xB8 0x9D      |      1 | LATIN SMALL LETTER E WITH CEDILLA AND BREVE            |\n",
      "| U+1E1F      | ḟ      | 0xE1 0xB8 0x9F      |      1 | LATIN SMALL LETTER F WITH DOT ABOVE                    |\n",
      "| U+1E21      | ḡ      | 0xE1 0xB8 0xA1      |      1 | LATIN SMALL LETTER G WITH MACRON                       |\n",
      "| U+1E23      | ḣ      | 0xE1 0xB8 0xA3      |      1 | LATIN SMALL LETTER H WITH DOT ABOVE                    |\n",
      "| U+1E25      | ḥ      | 0xE1 0xB8 0xA5      |      1 | LATIN SMALL LETTER H WITH DOT BELOW                    |\n",
      "| U+1E27      | ḧ      | 0xE1 0xB8 0xA7      |      1 | LATIN SMALL LETTER H WITH DIAERESIS                    |\n",
      "| U+1E29      | ḩ      | 0xE1 0xB8 0xA9      |      1 | LATIN SMALL LETTER H WITH CEDILLA                      |\n",
      "| U+1E2B      | ḫ      | 0xE1 0xB8 0xAB      |      1 | LATIN SMALL LETTER H WITH BREVE BELOW                  |\n",
      "| U+1E2D      | ḭ      | 0xE1 0xB8 0xAD      |      1 | LATIN SMALL LETTER I WITH TILDE BELOW                  |\n",
      "| U+1E2F      | ḯ      | 0xE1 0xB8 0xAF      |      1 | LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE          |\n",
      "| U+1E31      | ḱ      | 0xE1 0xB8 0xB1      |      1 | LATIN SMALL LETTER K WITH ACUTE                        |\n",
      "| U+1E33      | ḳ      | 0xE1 0xB8 0xB3      |      1 | LATIN SMALL LETTER K WITH DOT BELOW                    |\n",
      "| U+1E35      | ḵ      | 0xE1 0xB8 0xB5      |      1 | LATIN SMALL LETTER K WITH LINE BELOW                   |\n",
      "| U+1E37      | ḷ      | 0xE1 0xB8 0xB7      |      1 | LATIN SMALL LETTER L WITH DOT BELOW                    |\n",
      "| U+1E39      | ḹ      | 0xE1 0xB8 0xB9      |      1 | LATIN SMALL LETTER L WITH DOT BELOW AND MACRON         |\n",
      "| U+1E3B      | ḻ      | 0xE1 0xB8 0xBB      |      1 | LATIN SMALL LETTER L WITH LINE BELOW                   |\n",
      "| U+1E3D      | ḽ      | 0xE1 0xB8 0xBD      |      1 | LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW             |\n",
      "| U+1E3F      | ḿ      | 0xE1 0xB8 0xBF      |      1 | LATIN SMALL LETTER M WITH ACUTE                        |\n",
      "| U+1E41      | ṁ      | 0xE1 0xB9 0x81      |      1 | LATIN SMALL LETTER M WITH DOT ABOVE                    |\n",
      "| U+1E43      | ṃ      | 0xE1 0xB9 0x83      |      1 | LATIN SMALL LETTER M WITH DOT BELOW                    |\n",
      "| U+1E45      | ṅ      | 0xE1 0xB9 0x85      |      1 | LATIN SMALL LETTER N WITH DOT ABOVE                    |\n",
      "| U+1E47      | ṇ      | 0xE1 0xB9 0x87      |      1 | LATIN SMALL LETTER N WITH DOT BELOW                    |\n",
      "| U+1E49      | ṉ      | 0xE1 0xB9 0x89      |      1 | LATIN SMALL LETTER N WITH LINE BELOW                   |\n",
      "| U+1E4B      | ṋ      | 0xE1 0xB9 0x8B      |      1 | LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW             |\n",
      "| U+1E4D      | ṍ      | 0xE1 0xB9 0x8D      |      1 | LATIN SMALL LETTER O WITH TILDE AND ACUTE              |\n",
      "| U+1E4F      | ṏ      | 0xE1 0xB9 0x8F      |      1 | LATIN SMALL LETTER O WITH TILDE AND DIAERESIS          |\n",
      "| U+1E51      | ṑ      | 0xE1 0xB9 0x91      |      1 | LATIN SMALL LETTER O WITH MACRON AND GRAVE             |\n",
      "| U+1E53      | ṓ      | 0xE1 0xB9 0x93      |      1 | LATIN SMALL LETTER O WITH MACRON AND ACUTE             |\n",
      "| U+1E55      | ṕ      | 0xE1 0xB9 0x95      |      1 | LATIN SMALL LETTER P WITH ACUTE                        |\n",
      "| U+1E57      | ṗ      | 0xE1 0xB9 0x97      |      1 | LATIN SMALL LETTER P WITH DOT ABOVE                    |\n",
      "| U+1E59      | ṙ      | 0xE1 0xB9 0x99      |      1 | LATIN SMALL LETTER R WITH DOT ABOVE                    |\n",
      "| U+1E5B      | ṛ      | 0xE1 0xB9 0x9B      |      1 | LATIN SMALL LETTER R WITH DOT BELOW                    |\n",
      "| U+1E5D      | ṝ      | 0xE1 0xB9 0x9D      |      1 | LATIN SMALL LETTER R WITH DOT BELOW AND MACRON         |\n",
      "| U+1E5F      | ṟ      | 0xE1 0xB9 0x9F      |      1 | LATIN SMALL LETTER R WITH LINE BELOW                   |\n",
      "| U+1E63      | ṣ      | 0xE1 0xB9 0xA3      |      1 | LATIN SMALL LETTER S WITH DOT BELOW                    |\n",
      "| U+1E65      | ṥ      | 0xE1 0xB9 0xA5      |      1 | LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE          |\n",
      "| U+1E67      | ṧ      | 0xE1 0xB9 0xA7      |      1 | LATIN SMALL LETTER S WITH CARON AND DOT ABOVE          |\n",
      "| U+1E69      | ṩ      | 0xE1 0xB9 0xA9      |      1 | LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE      |\n",
      "| U+1E6B      | ṫ      | 0xE1 0xB9 0xAB      |      1 | LATIN SMALL LETTER T WITH DOT ABOVE                    |\n",
      "| U+1E6D      | ṭ      | 0xE1 0xB9 0xAD      |      1 | LATIN SMALL LETTER T WITH DOT BELOW                    |\n",
      "| U+1E6F      | ṯ      | 0xE1 0xB9 0xAF      |      1 | LATIN SMALL LETTER T WITH LINE BELOW                   |\n",
      "| U+1E71      | ṱ      | 0xE1 0xB9 0xB1      |      1 | LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW             |\n",
      "| U+1E73      | ṳ      | 0xE1 0xB9 0xB3      |      1 | LATIN SMALL LETTER U WITH DIAERESIS BELOW              |\n",
      "| U+1E75      | ṵ      | 0xE1 0xB9 0xB5      |      1 | LATIN SMALL LETTER U WITH TILDE BELOW                  |\n",
      "| U+1E77      | ṷ      | 0xE1 0xB9 0xB7      |      1 | LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW             |\n",
      "| U+1E79      | ṹ      | 0xE1 0xB9 0xB9      |      1 | LATIN SMALL LETTER U WITH TILDE AND ACUTE              |\n",
      "| U+1E7B      | ṻ      | 0xE1 0xB9 0xBB      |      1 | LATIN SMALL LETTER U WITH MACRON AND DIAERESIS         |\n",
      "| U+1E7D      | ṽ      | 0xE1 0xB9 0xBD      |      1 | LATIN SMALL LETTER V WITH TILDE                        |\n",
      "| U+1E7F      | ṿ      | 0xE1 0xB9 0xBF      |      1 | LATIN SMALL LETTER V WITH DOT BELOW                    |\n",
      "| U+1E81      | ẁ      | 0xE1 0xBA 0x81      |      1 | LATIN SMALL LETTER W WITH GRAVE                        |\n",
      "| U+1E83      | ẃ      | 0xE1 0xBA 0x83      |      1 | LATIN SMALL LETTER W WITH ACUTE                        |\n",
      "| U+1E85      | ẅ      | 0xE1 0xBA 0x85      |      1 | LATIN SMALL LETTER W WITH DIAERESIS                    |\n",
      "| U+1E87      | ẇ      | 0xE1 0xBA 0x87      |      1 | LATIN SMALL LETTER W WITH DOT ABOVE                    |\n",
      "| U+1E89      | ẉ      | 0xE1 0xBA 0x89      |      1 | LATIN SMALL LETTER W WITH DOT BELOW                    |\n",
      "| U+1E8B      | ẋ      | 0xE1 0xBA 0x8B      |      1 | LATIN SMALL LETTER X WITH DOT ABOVE                    |\n",
      "| U+1E8D      | ẍ      | 0xE1 0xBA 0x8D      |      1 | LATIN SMALL LETTER X WITH DIAERESIS                    |\n",
      "| U+1E8F      | ẏ      | 0xE1 0xBA 0x8F      |      1 | LATIN SMALL LETTER Y WITH DOT ABOVE                    |\n",
      "| U+1E91      | ẑ      | 0xE1 0xBA 0x91      |      1 | LATIN SMALL LETTER Z WITH CIRCUMFLEX                   |\n",
      "| U+1E93      | ẓ      | 0xE1 0xBA 0x93      |      1 | LATIN SMALL LETTER Z WITH DOT BELOW                    |\n",
      "| U+1E95      | ẕ      | 0xE1 0xBA 0x95      |      1 | LATIN SMALL LETTER Z WITH LINE BELOW                   |\n",
      "| U+0331      | ̱       | 0xCC 0xB1           |      1 | COMBINING MACRON BELOW                                 |\n",
      "| U+02BE      | ʾ      | 0xCA 0xBE           |      1 | MODIFIER LETTER RIGHT HALF RING                        |\n",
      "| U+1EA1      | ạ      | 0xE1 0xBA 0xA1      |      1 | LATIN SMALL LETTER A WITH DOT BELOW                    |\n",
      "| U+1EA3      | ả      | 0xE1 0xBA 0xA3      |      1 | LATIN SMALL LETTER A WITH HOOK ABOVE                   |\n",
      "| U+1EA5      | ấ      | 0xE1 0xBA 0xA5      |      1 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE         |\n",
      "| U+1EA7      | ầ      | 0xE1 0xBA 0xA7      |      1 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE         |\n",
      "| U+1EA9      | ẩ      | 0xE1 0xBA 0xA9      |      1 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE    |\n",
      "| U+1EAB      | ẫ      | 0xE1 0xBA 0xAB      |      1 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE         |\n",
      "| U+1EAD      | ậ      | 0xE1 0xBA 0xAD      |      1 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW     |\n",
      "| U+1EAF      | ắ      | 0xE1 0xBA 0xAF      |      1 | LATIN SMALL LETTER A WITH BREVE AND ACUTE              |\n",
      "| U+1EB1      | ằ      | 0xE1 0xBA 0xB1      |      1 | LATIN SMALL LETTER A WITH BREVE AND GRAVE              |\n",
      "| U+1EB3      | ẳ      | 0xE1 0xBA 0xB3      |      1 | LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE         |\n",
      "| U+1EB5      | ẵ      | 0xE1 0xBA 0xB5      |      1 | LATIN SMALL LETTER A WITH BREVE AND TILDE              |\n",
      "| U+1EB7      | ặ      | 0xE1 0xBA 0xB7      |      1 | LATIN SMALL LETTER A WITH BREVE AND DOT BELOW          |\n",
      "| U+1EB9      | ẹ      | 0xE1 0xBA 0xB9      |      1 | LATIN SMALL LETTER E WITH DOT BELOW                    |\n",
      "| U+1EBB      | ẻ      | 0xE1 0xBA 0xBB      |      1 | LATIN SMALL LETTER E WITH HOOK ABOVE                   |\n",
      "| U+1EBD      | ẽ      | 0xE1 0xBA 0xBD      |      1 | LATIN SMALL LETTER E WITH TILDE                        |\n",
      "| U+1EBF      | ế      | 0xE1 0xBA 0xBF      |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE         |\n",
      "| U+1EC1      | ề      | 0xE1 0xBB 0x81      |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE         |\n",
      "| U+1EC3      | ể      | 0xE1 0xBB 0x83      |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE    |\n",
      "| U+1EC5      | ễ      | 0xE1 0xBB 0x85      |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE         |\n",
      "| U+1EC7      | ệ      | 0xE1 0xBB 0x87      |      1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW     |\n",
      "| U+1EC9      | ỉ      | 0xE1 0xBB 0x89      |      1 | LATIN SMALL LETTER I WITH HOOK ABOVE                   |\n",
      "| U+1ECB      | ị      | 0xE1 0xBB 0x8B      |      1 | LATIN SMALL LETTER I WITH DOT BELOW                    |\n",
      "| U+1ECD      | ọ      | 0xE1 0xBB 0x8D      |      1 | LATIN SMALL LETTER O WITH DOT BELOW                    |\n",
      "| U+1ECF      | ỏ      | 0xE1 0xBB 0x8F      |      1 | LATIN SMALL LETTER O WITH HOOK ABOVE                   |\n",
      "| U+1ED1      | ố      | 0xE1 0xBB 0x91      |      1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE         |\n",
      "| U+1ED3      | ồ      | 0xE1 0xBB 0x93      |      1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE         |\n",
      "| U+1ED5      | ổ      | 0xE1 0xBB 0x95      |      1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE    |\n",
      "| U+1ED7      | ỗ      | 0xE1 0xBB 0x97      |      1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE         |\n",
      "| U+1ED9      | ộ      | 0xE1 0xBB 0x99      |      1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW     |\n",
      "| U+1EDB      | ớ      | 0xE1 0xBB 0x9B      |      1 | LATIN SMALL LETTER O WITH HORN AND ACUTE               |\n",
      "| U+1EDD      | ờ      | 0xE1 0xBB 0x9D      |      1 | LATIN SMALL LETTER O WITH HORN AND GRAVE               |\n",
      "| U+1EDF      | ở      | 0xE1 0xBB 0x9F      |      1 | LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE          |\n",
      "| U+1EE1      | ỡ      | 0xE1 0xBB 0xA1      |      1 | LATIN SMALL LETTER O WITH HORN AND TILDE               |\n",
      "| U+1EE3      | ợ      | 0xE1 0xBB 0xA3      |      1 | LATIN SMALL LETTER O WITH HORN AND DOT BELOW           |\n",
      "| U+1EE5      | ụ      | 0xE1 0xBB 0xA5      |      1 | LATIN SMALL LETTER U WITH DOT BELOW                    |\n",
      "| U+1EE7      | ủ      | 0xE1 0xBB 0xA7      |      1 | LATIN SMALL LETTER U WITH HOOK ABOVE                   |\n",
      "| U+1EE9      | ứ      | 0xE1 0xBB 0xA9      |      1 | LATIN SMALL LETTER U WITH HORN AND ACUTE               |\n",
      "| U+1EEB      | ừ      | 0xE1 0xBB 0xAB      |      1 | LATIN SMALL LETTER U WITH HORN AND GRAVE               |\n",
      "| U+1EED      | ử      | 0xE1 0xBB 0xAD      |      1 | LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE          |\n",
      "| U+1EEF      | ữ      | 0xE1 0xBB 0xAF      |      1 | LATIN SMALL LETTER U WITH HORN AND TILDE               |\n",
      "| U+1EF1      | ự      | 0xE1 0xBB 0xB1      |      1 | LATIN SMALL LETTER U WITH HORN AND DOT BELOW           |\n",
      "| U+1EF3      | ỳ      | 0xE1 0xBB 0xB3      |      1 | LATIN SMALL LETTER Y WITH GRAVE                        |\n",
      "| U+1EF5      | ỵ      | 0xE1 0xBB 0xB5      |      1 | LATIN SMALL LETTER Y WITH DOT BELOW                    |\n",
      "| U+1EF7      | ỷ      | 0xE1 0xBB 0xB7      |      1 | LATIN SMALL LETTER Y WITH HOOK ABOVE                   |\n",
      "| U+1EF9      | ỹ      | 0xE1 0xBB 0xB9      |      1 | LATIN SMALL LETTER Y WITH TILDE                        |\n",
      "| U+1EFB      | ỻ      | 0xE1 0xBB 0xBB      |      1 | LATIN SMALL LETTER MIDDLE-WELSH LL                     |\n",
      "| U+1EFD      | ỽ      | 0xE1 0xBB 0xBD      |      1 | LATIN SMALL LETTER MIDDLE-WELSH V                      |\n",
      "| U+1EFF      | ỿ      | 0xE1 0xBB 0xBF      |      1 | LATIN SMALL LETTER Y WITH LOOP                         |\n",
      "| U+1F10      | ἐ      | 0xE1 0xBC 0x90      |      1 | GREEK SMALL LETTER EPSILON WITH PSILI                  |\n",
      "| U+1F11      | ἑ      | 0xE1 0xBC 0x91      |      1 | GREEK SMALL LETTER EPSILON WITH DASIA                  |\n",
      "| U+1F12      | ἒ      | 0xE1 0xBC 0x92      |      1 | GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA        |\n",
      "| U+1F13      | ἓ      | 0xE1 0xBC 0x93      |      1 | GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA        |\n",
      "| U+1F14      | ἔ      | 0xE1 0xBC 0x94      |      1 | GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA         |\n",
      "| U+1F15      | ἕ      | 0xE1 0xBC 0x95      |      1 | GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA         |\n",
      "| U+1F30      | ἰ      | 0xE1 0xBC 0xB0      |      1 | GREEK SMALL LETTER IOTA WITH PSILI                     |\n",
      "| U+1F31      | ἱ      | 0xE1 0xBC 0xB1      |      1 | GREEK SMALL LETTER IOTA WITH DASIA                     |\n",
      "| U+1F32      | ἲ      | 0xE1 0xBC 0xB2      |      1 | GREEK SMALL LETTER IOTA WITH PSILI AND VARIA           |\n",
      "| U+1F33      | ἳ      | 0xE1 0xBC 0xB3      |      1 | GREEK SMALL LETTER IOTA WITH DASIA AND VARIA           |\n",
      "| U+1F34      | ἴ      | 0xE1 0xBC 0xB4      |      1 | GREEK SMALL LETTER IOTA WITH PSILI AND OXIA            |\n",
      "| U+1F35      | ἵ      | 0xE1 0xBC 0xB5      |      1 | GREEK SMALL LETTER IOTA WITH DASIA AND OXIA            |\n",
      "| U+1F36      | ἶ      | 0xE1 0xBC 0xB6      |      1 | GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI     |\n",
      "| U+1F37      | ἷ      | 0xE1 0xBC 0xB7      |      1 | GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI     |\n",
      "| U+1F40      | ὀ      | 0xE1 0xBD 0x80      |      1 | GREEK SMALL LETTER OMICRON WITH PSILI                  |\n",
      "| U+1F41      | ὁ      | 0xE1 0xBD 0x81      |      1 | GREEK SMALL LETTER OMICRON WITH DASIA                  |\n",
      "| U+1F42      | ὂ      | 0xE1 0xBD 0x82      |      1 | GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA        |\n",
      "| U+1F43      | ὃ      | 0xE1 0xBD 0x83      |      1 | GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA        |\n",
      "| U+1F44      | ὄ      | 0xE1 0xBD 0x84      |      1 | GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA         |\n",
      "| U+1F45      | ὅ      | 0xE1 0xBD 0x85      |      1 | GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA         |\n",
      "| U+1F51      | ὑ      | 0xE1 0xBD 0x91      |      1 | GREEK SMALL LETTER UPSILON WITH DASIA                  |\n",
      "| U+1F53      | ὓ      | 0xE1 0xBD 0x93      |      1 | GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA        |\n",
      "| U+1F55      | ὕ      | 0xE1 0xBD 0x95      |      1 | GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA         |\n",
      "| U+1F57      | ὗ      | 0xE1 0xBD 0x97      |      1 | GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI  |\n",
      "| U+1FB0      | ᾰ      | 0xE1 0xBE 0xB0      |      1 | GREEK SMALL LETTER ALPHA WITH VRACHY                   |\n",
      "| U+1FB1      | ᾱ      | 0xE1 0xBE 0xB1      |      1 | GREEK SMALL LETTER ALPHA WITH MACRON                   |\n",
      "| U+1F71      | ά      | 0xE1 0xBD 0xB1      |      1 | GREEK SMALL LETTER ALPHA WITH OXIA                     |\n",
      "| U+1F72      | ὲ      | 0xE1 0xBD 0xB2      |      1 | GREEK SMALL LETTER EPSILON WITH VARIA                  |\n",
      "| U+1F73      | έ      | 0xE1 0xBD 0xB3      |      1 | GREEK SMALL LETTER EPSILON WITH OXIA                   |\n",
      "| U+1F75      | ή      | 0xE1 0xBD 0xB5      |      1 | GREEK SMALL LETTER ETA WITH OXIA                       |\n",
      "| U+1FD0      | ῐ      | 0xE1 0xBF 0x90      |      1 | GREEK SMALL LETTER IOTA WITH VRACHY                    |\n",
      "| U+1FD1      | ῑ      | 0xE1 0xBF 0x91      |      1 | GREEK SMALL LETTER IOTA WITH MACRON                    |\n",
      "| U+1F76      | ὶ      | 0xE1 0xBD 0xB6      |      1 | GREEK SMALL LETTER IOTA WITH VARIA                     |\n",
      "| U+1F77      | ί      | 0xE1 0xBD 0xB7      |      1 | GREEK SMALL LETTER IOTA WITH OXIA                      |\n",
      "| U+1FE0      | ῠ      | 0xE1 0xBF 0xA0      |      1 | GREEK SMALL LETTER UPSILON WITH VRACHY                 |\n",
      "| U+1FE1      | ῡ      | 0xE1 0xBF 0xA1      |      1 | GREEK SMALL LETTER UPSILON WITH MACRON                 |\n",
      "| U+1F7A      | ὺ      | 0xE1 0xBD 0xBA      |      1 | GREEK SMALL LETTER UPSILON WITH VARIA                  |\n",
      "| U+1F7B      | ύ      | 0xE1 0xBD 0xBB      |      1 | GREEK SMALL LETTER UPSILON WITH OXIA                   |\n",
      "| U+1FE5      | ῥ      | 0xE1 0xBF 0xA5      |      1 | GREEK SMALL LETTER RHO WITH DASIA                      |\n",
      "| U+1F78      | ὸ      | 0xE1 0xBD 0xB8      |      1 | GREEK SMALL LETTER OMICRON WITH VARIA                  |\n",
      "| U+1F79      | ό      | 0xE1 0xBD 0xB9      |      1 | GREEK SMALL LETTER OMICRON WITH OXIA                   |\n",
      "| U+1F7D      | ώ      | 0xE1 0xBD 0xBD      |      1 | GREEK SMALL LETTER OMEGA WITH OXIA                     |\n",
      "| U+214E      | ⅎ      | 0xE2 0x85 0x8E      |      1 | TURNED SMALL F                                         |\n",
      "| U+2170      | ⅰ      | 0xE2 0x85 0xB0      |      1 | SMALL ROMAN NUMERAL ONE                                |\n",
      "| U+2171      | ⅱ      | 0xE2 0x85 0xB1      |      1 | SMALL ROMAN NUMERAL TWO                                |\n",
      "| U+2172      | ⅲ      | 0xE2 0x85 0xB2      |      1 | SMALL ROMAN NUMERAL THREE                              |\n",
      "| U+2173      | ⅳ      | 0xE2 0x85 0xB3      |      1 | SMALL ROMAN NUMERAL FOUR                               |\n",
      "| U+2174      | ⅴ      | 0xE2 0x85 0xB4      |      1 | SMALL ROMAN NUMERAL FIVE                               |\n",
      "| U+2175      | ⅵ      | 0xE2 0x85 0xB5      |      1 | SMALL ROMAN NUMERAL SIX                                |\n",
      "| U+2176      | ⅶ      | 0xE2 0x85 0xB6      |      1 | SMALL ROMAN NUMERAL SEVEN                              |\n",
      "| U+2177      | ⅷ      | 0xE2 0x85 0xB7      |      1 | SMALL ROMAN NUMERAL EIGHT                              |\n",
      "| U+2178      | ⅸ      | 0xE2 0x85 0xB8      |      1 | SMALL ROMAN NUMERAL NINE                               |\n",
      "| U+2179      | ⅹ      | 0xE2 0x85 0xB9      |      1 | SMALL ROMAN NUMERAL TEN                                |\n",
      "| U+217A      | ⅺ      | 0xE2 0x85 0xBA      |      1 | SMALL ROMAN NUMERAL ELEVEN                             |\n",
      "| U+217B      | ⅻ      | 0xE2 0x85 0xBB      |      1 | SMALL ROMAN NUMERAL TWELVE                             |\n",
      "| U+217C      | ⅼ      | 0xE2 0x85 0xBC      |      1 | SMALL ROMAN NUMERAL FIFTY                              |\n",
      "| U+217D      | ⅽ      | 0xE2 0x85 0xBD      |      1 | SMALL ROMAN NUMERAL ONE HUNDRED                        |\n",
      "| U+217E      | ⅾ      | 0xE2 0x85 0xBE      |      1 | SMALL ROMAN NUMERAL FIVE HUNDRED                       |\n",
      "| U+217F      | ⅿ      | 0xE2 0x85 0xBF      |      1 | SMALL ROMAN NUMERAL ONE THOUSAND                       |\n",
      "| U+2184      | ↄ      | 0xE2 0x86 0x84      |      1 | LATIN SMALL LETTER REVERSED C                          |\n",
      "| U+24D0      | ⓐ      | 0xE2 0x93 0x90      |      1 | CIRCLED LATIN SMALL LETTER A                           |\n",
      "| U+24D1      | ⓑ      | 0xE2 0x93 0x91      |      1 | CIRCLED LATIN SMALL LETTER B                           |\n",
      "| U+24D2      | ⓒ      | 0xE2 0x93 0x92      |      1 | CIRCLED LATIN SMALL LETTER C                           |\n",
      "| U+24D3      | ⓓ      | 0xE2 0x93 0x93      |      1 | CIRCLED LATIN SMALL LETTER D                           |\n",
      "| U+24D4      | ⓔ      | 0xE2 0x93 0x94      |      1 | CIRCLED LATIN SMALL LETTER E                           |\n",
      "| U+24D5      | ⓕ      | 0xE2 0x93 0x95      |      1 | CIRCLED LATIN SMALL LETTER F                           |\n",
      "| U+24D6      | ⓖ      | 0xE2 0x93 0x96      |      1 | CIRCLED LATIN SMALL LETTER G                           |\n",
      "| U+24D7      | ⓗ      | 0xE2 0x93 0x97      |      1 | CIRCLED LATIN SMALL LETTER H                           |\n",
      "| U+24D8      | ⓘ      | 0xE2 0x93 0x98      |      1 | CIRCLED LATIN SMALL LETTER I                           |\n",
      "| U+24D9      | ⓙ      | 0xE2 0x93 0x99      |      1 | CIRCLED LATIN SMALL LETTER J                           |\n",
      "| U+24DA      | ⓚ      | 0xE2 0x93 0x9A      |      1 | CIRCLED LATIN SMALL LETTER K                           |\n",
      "| U+24DB      | ⓛ      | 0xE2 0x93 0x9B      |      1 | CIRCLED LATIN SMALL LETTER L                           |\n",
      "| U+24DC      | ⓜ      | 0xE2 0x93 0x9C      |      1 | CIRCLED LATIN SMALL LETTER M                           |\n",
      "| U+24DD      | ⓝ      | 0xE2 0x93 0x9D      |      1 | CIRCLED LATIN SMALL LETTER N                           |\n",
      "| U+24DE      | ⓞ      | 0xE2 0x93 0x9E      |      1 | CIRCLED LATIN SMALL LETTER O                           |\n",
      "| U+24DF      | ⓟ      | 0xE2 0x93 0x9F      |      1 | CIRCLED LATIN SMALL LETTER P                           |\n",
      "| U+24E0      | ⓠ      | 0xE2 0x93 0xA0      |      1 | CIRCLED LATIN SMALL LETTER Q                           |\n",
      "| U+24E1      | ⓡ      | 0xE2 0x93 0xA1      |      1 | CIRCLED LATIN SMALL LETTER R                           |\n",
      "| U+24E2      | ⓢ      | 0xE2 0x93 0xA2      |      1 | CIRCLED LATIN SMALL LETTER S                           |\n",
      "| U+24E3      | ⓣ      | 0xE2 0x93 0xA3      |      1 | CIRCLED LATIN SMALL LETTER T                           |\n",
      "| U+24E4      | ⓤ      | 0xE2 0x93 0xA4      |      1 | CIRCLED LATIN SMALL LETTER U                           |\n",
      "| U+24E5      | ⓥ      | 0xE2 0x93 0xA5      |      1 | CIRCLED LATIN SMALL LETTER V                           |\n",
      "| U+24E6      | ⓦ      | 0xE2 0x93 0xA6      |      1 | CIRCLED LATIN SMALL LETTER W                           |\n",
      "| U+24E7      | ⓧ      | 0xE2 0x93 0xA7      |      1 | CIRCLED LATIN SMALL LETTER X                           |\n",
      "| U+24E8      | ⓨ      | 0xE2 0x93 0xA8      |      1 | CIRCLED LATIN SMALL LETTER Y                           |\n",
      "| U+24E9      | ⓩ      | 0xE2 0x93 0xA9      |      1 | CIRCLED LATIN SMALL LETTER Z                           |\n",
      "| U+2C30      | ⰰ      | 0xE2 0xB0 0xB0      |      1 | GLAGOLITIC SMALL LETTER AZU                            |\n",
      "| U+2C31      | ⰱ      | 0xE2 0xB0 0xB1      |      1 | GLAGOLITIC SMALL LETTER BUKY                           |\n",
      "| U+2C32      | ⰲ      | 0xE2 0xB0 0xB2      |      1 | GLAGOLITIC SMALL LETTER VEDE                           |\n",
      "| U+2C33      | ⰳ      | 0xE2 0xB0 0xB3      |      1 | GLAGOLITIC SMALL LETTER GLAGOLI                        |\n",
      "| U+2C34      | ⰴ      | 0xE2 0xB0 0xB4      |      1 | GLAGOLITIC SMALL LETTER DOBRO                          |\n",
      "| U+2C35      | ⰵ      | 0xE2 0xB0 0xB5      |      1 | GLAGOLITIC SMALL LETTER YESTU                          |\n",
      "| U+2C36      | ⰶ      | 0xE2 0xB0 0xB6      |      1 | GLAGOLITIC SMALL LETTER ZHIVETE                        |\n",
      "| U+2C37      | ⰷ      | 0xE2 0xB0 0xB7      |      1 | GLAGOLITIC SMALL LETTER DZELO                          |\n",
      "| U+2C38      | ⰸ      | 0xE2 0xB0 0xB8      |      1 | GLAGOLITIC SMALL LETTER ZEMLJA                         |\n",
      "| U+2C39      | ⰹ      | 0xE2 0xB0 0xB9      |      1 | GLAGOLITIC SMALL LETTER IZHE                           |\n",
      "| U+2C3A      | ⰺ      | 0xE2 0xB0 0xBA      |      1 | GLAGOLITIC SMALL LETTER INITIAL IZHE                   |\n",
      "| U+2C3B      | ⰻ      | 0xE2 0xB0 0xBB      |      1 | GLAGOLITIC SMALL LETTER I                              |\n",
      "| U+2C3C      | ⰼ      | 0xE2 0xB0 0xBC      |      1 | GLAGOLITIC SMALL LETTER DJERVI                         |\n",
      "| U+2C3D      | ⰽ      | 0xE2 0xB0 0xBD      |      1 | GLAGOLITIC SMALL LETTER KAKO                           |\n",
      "| U+2C3E      | ⰾ      | 0xE2 0xB0 0xBE      |      1 | GLAGOLITIC SMALL LETTER LJUDIJE                        |\n",
      "| U+2C3F      | ⰿ      | 0xE2 0xB0 0xBF      |      1 | GLAGOLITIC SMALL LETTER MYSLITE                        |\n",
      "| U+2C40      | ⱀ      | 0xE2 0xB1 0x80      |      1 | GLAGOLITIC SMALL LETTER NASHI                          |\n",
      "| U+2C41      | ⱁ      | 0xE2 0xB1 0x81      |      1 | GLAGOLITIC SMALL LETTER ONU                            |\n",
      "| U+2C42      | ⱂ      | 0xE2 0xB1 0x82      |      1 | GLAGOLITIC SMALL LETTER POKOJI                         |\n",
      "| U+2C43      | ⱃ      | 0xE2 0xB1 0x83      |      1 | GLAGOLITIC SMALL LETTER RITSI                          |\n",
      "| U+2C44      | ⱄ      | 0xE2 0xB1 0x84      |      1 | GLAGOLITIC SMALL LETTER SLOVO                          |\n",
      "| U+2C45      | ⱅ      | 0xE2 0xB1 0x85      |      1 | GLAGOLITIC SMALL LETTER TVRIDO                         |\n",
      "| U+2C46      | ⱆ      | 0xE2 0xB1 0x86      |      1 | GLAGOLITIC SMALL LETTER UKU                            |\n",
      "| U+2C47      | ⱇ      | 0xE2 0xB1 0x87      |      1 | GLAGOLITIC SMALL LETTER FRITU                          |\n",
      "| U+2C48      | ⱈ      | 0xE2 0xB1 0x88      |      1 | GLAGOLITIC SMALL LETTER HERU                           |\n",
      "| U+2C49      | ⱉ      | 0xE2 0xB1 0x89      |      1 | GLAGOLITIC SMALL LETTER OTU                            |\n",
      "| U+2C4A      | ⱊ      | 0xE2 0xB1 0x8A      |      1 | GLAGOLITIC SMALL LETTER PE                             |\n",
      "| U+2C4B      | ⱋ      | 0xE2 0xB1 0x8B      |      1 | GLAGOLITIC SMALL LETTER SHTA                           |\n",
      "| U+2C4C      | ⱌ      | 0xE2 0xB1 0x8C      |      1 | GLAGOLITIC SMALL LETTER TSI                            |\n",
      "| U+2C4D      | ⱍ      | 0xE2 0xB1 0x8D      |      1 | GLAGOLITIC SMALL LETTER CHRIVI                         |\n",
      "| U+2C4E      | ⱎ      | 0xE2 0xB1 0x8E      |      1 | GLAGOLITIC SMALL LETTER SHA                            |\n",
      "| U+2C4F      | ⱏ      | 0xE2 0xB1 0x8F      |      1 | GLAGOLITIC SMALL LETTER YERU                           |\n",
      "| U+2C50      | ⱐ      | 0xE2 0xB1 0x90      |      1 | GLAGOLITIC SMALL LETTER YERI                           |\n",
      "| U+2C51      | ⱑ      | 0xE2 0xB1 0x91      |      1 | GLAGOLITIC SMALL LETTER YATI                           |\n",
      "| U+2C52      | ⱒ      | 0xE2 0xB1 0x92      |      1 | GLAGOLITIC SMALL LETTER SPIDERY HA                     |\n",
      "| U+2C53      | ⱓ      | 0xE2 0xB1 0x93      |      1 | GLAGOLITIC SMALL LETTER YU                             |\n",
      "| U+2C54      | ⱔ      | 0xE2 0xB1 0x94      |      1 | GLAGOLITIC SMALL LETTER SMALL YUS                      |\n",
      "| U+2C55      | ⱕ      | 0xE2 0xB1 0x95      |      1 | GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL            |\n",
      "| U+2C56      | ⱖ      | 0xE2 0xB1 0x96      |      1 | GLAGOLITIC SMALL LETTER YO                             |\n",
      "| U+2C57      | ⱗ      | 0xE2 0xB1 0x97      |      1 | GLAGOLITIC SMALL LETTER IOTATED SMALL YUS              |\n",
      "| U+2C58      | ⱘ      | 0xE2 0xB1 0x98      |      1 | GLAGOLITIC SMALL LETTER BIG YUS                        |\n",
      "| U+2C59      | ⱙ      | 0xE2 0xB1 0x99      |      1 | GLAGOLITIC SMALL LETTER IOTATED BIG YUS                |\n",
      "| U+2C5A      | ⱚ      | 0xE2 0xB1 0x9A      |      1 | GLAGOLITIC SMALL LETTER FITA                           |\n",
      "| U+2C5B      | ⱛ      | 0xE2 0xB1 0x9B      |      1 | GLAGOLITIC SMALL LETTER IZHITSA                        |\n",
      "| U+2C5C      | ⱜ      | 0xE2 0xB1 0x9C      |      1 | GLAGOLITIC SMALL LETTER SHTAPIC                        |\n",
      "| U+2C5D      | ⱝ      | 0xE2 0xB1 0x9D      |      1 | GLAGOLITIC SMALL LETTER TROKUTASTI A                   |\n",
      "| U+2C5E      | ⱞ      | 0xE2 0xB1 0x9E      |      1 | GLAGOLITIC SMALL LETTER LATINATE MYSLITE               |\n",
      "| U+2C5F      | ⱟ      | 0xE2 0xB1 0x9F      |      1 | GLAGOLITIC SMALL LETTER CAUDATE CHRIVI                 |\n",
      "| U+2C61      | ⱡ      | 0xE2 0xB1 0xA1      |      1 | LATIN SMALL LETTER L WITH DOUBLE BAR                   |\n",
      "| U+026B      | ɫ      | 0xC9 0xAB           |      1 | LATIN SMALL LETTER L WITH MIDDLE TILDE                 |\n",
      "| U+1D7D      | ᵽ      | 0xE1 0xB5 0xBD      |      1 | LATIN SMALL LETTER P WITH STROKE                       |\n",
      "| U+027D      | ɽ      | 0xC9 0xBD           |      1 | LATIN SMALL LETTER R WITH TAIL                         |\n",
      "| U+2C68      | ⱨ      | 0xE2 0xB1 0xA8      |      1 | LATIN SMALL LETTER H WITH DESCENDER                    |\n",
      "| U+2C6A      | ⱪ      | 0xE2 0xB1 0xAA      |      1 | LATIN SMALL LETTER K WITH DESCENDER                    |\n",
      "| U+2C6C      | ⱬ      | 0xE2 0xB1 0xAC      |      1 | LATIN SMALL LETTER Z WITH DESCENDER                    |\n",
      "| U+0251      | ɑ      | 0xC9 0x91           |      1 | LATIN SMALL LETTER ALPHA                               |\n",
      "| U+0271      | ɱ      | 0xC9 0xB1           |      1 | LATIN SMALL LETTER M WITH HOOK                         |\n",
      "| U+0250      | ɐ      | 0xC9 0x90           |      1 | LATIN SMALL LETTER TURNED A                            |\n",
      "| U+0252      | ɒ      | 0xC9 0x92           |      1 | LATIN SMALL LETTER TURNED ALPHA                        |\n",
      "| U+2C73      | ⱳ      | 0xE2 0xB1 0xB3      |      1 | LATIN SMALL LETTER W WITH HOOK                         |\n",
      "| U+2C76      | ⱶ      | 0xE2 0xB1 0xB6      |      1 | LATIN SMALL LETTER HALF H                              |\n",
      "| U+023F      | ȿ      | 0xC8 0xBF           |      1 | LATIN SMALL LETTER S WITH SWASH TAIL                   |\n",
      "| U+0240      | ɀ      | 0xC9 0x80           |      1 | LATIN SMALL LETTER Z WITH SWASH TAIL                   |\n",
      "| U+2C81      | ⲁ      | 0xE2 0xB2 0x81      |      1 | COPTIC SMALL LETTER ALFA                               |\n",
      "| U+2C83      | ⲃ      | 0xE2 0xB2 0x83      |      1 | COPTIC SMALL LETTER VIDA                               |\n",
      "| U+2C85      | ⲅ      | 0xE2 0xB2 0x85      |      1 | COPTIC SMALL LETTER GAMMA                              |\n",
      "| U+2C87      | ⲇ      | 0xE2 0xB2 0x87      |      1 | COPTIC SMALL LETTER DALDA                              |\n",
      "| U+2C89      | ⲉ      | 0xE2 0xB2 0x89      |      1 | COPTIC SMALL LETTER EIE                                |\n",
      "| U+2C8B      | ⲋ      | 0xE2 0xB2 0x8B      |      1 | COPTIC SMALL LETTER SOU                                |\n",
      "| U+2C8D      | ⲍ      | 0xE2 0xB2 0x8D      |      1 | COPTIC SMALL LETTER ZATA                               |\n",
      "| U+2C8F      | ⲏ      | 0xE2 0xB2 0x8F      |      1 | COPTIC SMALL LETTER HATE                               |\n",
      "| U+2C91      | ⲑ      | 0xE2 0xB2 0x91      |      1 | COPTIC SMALL LETTER THETHE                             |\n",
      "| U+2C93      | ⲓ      | 0xE2 0xB2 0x93      |      1 | COPTIC SMALL LETTER IAUDA                              |\n",
      "| U+2C95      | ⲕ      | 0xE2 0xB2 0x95      |      1 | COPTIC SMALL LETTER KAPA                               |\n",
      "| U+2C97      | ⲗ      | 0xE2 0xB2 0x97      |      1 | COPTIC SMALL LETTER LAULA                              |\n",
      "| U+2C99      | ⲙ      | 0xE2 0xB2 0x99      |      1 | COPTIC SMALL LETTER MI                                 |\n",
      "| U+2C9B      | ⲛ      | 0xE2 0xB2 0x9B      |      1 | COPTIC SMALL LETTER NI                                 |\n",
      "| U+2C9D      | ⲝ      | 0xE2 0xB2 0x9D      |      1 | COPTIC SMALL LETTER KSI                                |\n",
      "| U+2C9F      | ⲟ      | 0xE2 0xB2 0x9F      |      1 | COPTIC SMALL LETTER O                                  |\n",
      "| U+2CA1      | ⲡ      | 0xE2 0xB2 0xA1      |      1 | COPTIC SMALL LETTER PI                                 |\n",
      "| U+2CA3      | ⲣ      | 0xE2 0xB2 0xA3      |      1 | COPTIC SMALL LETTER RO                                 |\n",
      "| U+2CA5      | ⲥ      | 0xE2 0xB2 0xA5      |      1 | COPTIC SMALL LETTER SIMA                               |\n",
      "| U+2CA7      | ⲧ      | 0xE2 0xB2 0xA7      |      1 | COPTIC SMALL LETTER TAU                                |\n",
      "| U+2CA9      | ⲩ      | 0xE2 0xB2 0xA9      |      1 | COPTIC SMALL LETTER UA                                 |\n",
      "| U+2CAB      | ⲫ      | 0xE2 0xB2 0xAB      |      1 | COPTIC SMALL LETTER FI                                 |\n",
      "| U+2CAD      | ⲭ      | 0xE2 0xB2 0xAD      |      1 | COPTIC SMALL LETTER KHI                                |\n",
      "| U+2CAF      | ⲯ      | 0xE2 0xB2 0xAF      |      1 | COPTIC SMALL LETTER PSI                                |\n",
      "| U+2CB1      | ⲱ      | 0xE2 0xB2 0xB1      |      1 | COPTIC SMALL LETTER OOU                                |\n",
      "| U+2CB3      | ⲳ      | 0xE2 0xB2 0xB3      |      1 | COPTIC SMALL LETTER DIALECT-P ALEF                     |\n",
      "| U+2CB5      | ⲵ      | 0xE2 0xB2 0xB5      |      1 | COPTIC SMALL LETTER OLD COPTIC AIN                     |\n",
      "| U+2CB7      | ⲷ      | 0xE2 0xB2 0xB7      |      1 | COPTIC SMALL LETTER CRYPTOGRAMMIC EIE                  |\n",
      "| U+2CB9      | ⲹ      | 0xE2 0xB2 0xB9      |      1 | COPTIC SMALL LETTER DIALECT-P KAPA                     |\n",
      "| U+2CBB      | ⲻ      | 0xE2 0xB2 0xBB      |      1 | COPTIC SMALL LETTER DIALECT-P NI                       |\n",
      "| U+2CBD      | ⲽ      | 0xE2 0xB2 0xBD      |      1 | COPTIC SMALL LETTER CRYPTOGRAMMIC NI                   |\n",
      "| U+2CBF      | ⲿ      | 0xE2 0xB2 0xBF      |      1 | COPTIC SMALL LETTER OLD COPTIC OOU                     |\n",
      "| U+2CC1      | ⳁ      | 0xE2 0xB3 0x81      |      1 | COPTIC SMALL LETTER SAMPI                              |\n",
      "| U+2CC3      | ⳃ      | 0xE2 0xB3 0x83      |      1 | COPTIC SMALL LETTER CROSSED SHEI                       |\n",
      "| U+2CC5      | ⳅ      | 0xE2 0xB3 0x85      |      1 | COPTIC SMALL LETTER OLD COPTIC SHEI                    |\n",
      "| U+2CC7      | ⳇ      | 0xE2 0xB3 0x87      |      1 | COPTIC SMALL LETTER OLD COPTIC ESH                     |\n",
      "| U+2CC9      | ⳉ      | 0xE2 0xB3 0x89      |      1 | COPTIC SMALL LETTER AKHMIMIC KHEI                      |\n",
      "| U+2CCB      | ⳋ      | 0xE2 0xB3 0x8B      |      1 | COPTIC SMALL LETTER DIALECT-P HORI                     |\n",
      "| U+2CCD      | ⳍ      | 0xE2 0xB3 0x8D      |      1 | COPTIC SMALL LETTER OLD COPTIC HORI                    |\n",
      "| U+2CCF      | ⳏ      | 0xE2 0xB3 0x8F      |      1 | COPTIC SMALL LETTER OLD COPTIC HA                      |\n",
      "| U+2CD1      | ⳑ      | 0xE2 0xB3 0x91      |      1 | COPTIC SMALL LETTER L-SHAPED HA                        |\n",
      "| U+2CD3      | ⳓ      | 0xE2 0xB3 0x93      |      1 | COPTIC SMALL LETTER OLD COPTIC HEI                     |\n",
      "| U+2CD5      | ⳕ      | 0xE2 0xB3 0x95      |      1 | COPTIC SMALL LETTER OLD COPTIC HAT                     |\n",
      "| U+2CD7      | ⳗ      | 0xE2 0xB3 0x97      |      1 | COPTIC SMALL LETTER OLD COPTIC GANGIA                  |\n",
      "| U+2CD9      | ⳙ      | 0xE2 0xB3 0x99      |      1 | COPTIC SMALL LETTER OLD COPTIC DJA                     |\n",
      "| U+2CDB      | ⳛ      | 0xE2 0xB3 0x9B      |      1 | COPTIC SMALL LETTER OLD COPTIC SHIMA                   |\n",
      "| U+2CDD      | ⳝ      | 0xE2 0xB3 0x9D      |      1 | COPTIC SMALL LETTER OLD NUBIAN SHIMA                   |\n",
      "| U+2CDF      | ⳟ      | 0xE2 0xB3 0x9F      |      1 | COPTIC SMALL LETTER OLD NUBIAN NGI                     |\n",
      "| U+2CE1      | ⳡ      | 0xE2 0xB3 0xA1      |      1 | COPTIC SMALL LETTER OLD NUBIAN NYI                     |\n",
      "| U+2CE3      | ⳣ      | 0xE2 0xB3 0xA3      |      1 | COPTIC SMALL LETTER OLD NUBIAN WAU                     |\n",
      "| U+2CEC      | ⳬ      | 0xE2 0xB3 0xAC      |      1 | COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI                 |\n",
      "| U+2CEE      | ⳮ      | 0xE2 0xB3 0xAE      |      1 | COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA               |\n",
      "| U+2CF3      | ⳳ      | 0xE2 0xB3 0xB3      |      1 | COPTIC SMALL LETTER BOHAIRIC KHEI                      |\n",
      "| U+A641      | ꙁ      | 0xEA 0x99 0x81      |      1 | CYRILLIC SMALL LETTER ZEMLYA                           |\n",
      "| U+A643      | ꙃ      | 0xEA 0x99 0x83      |      1 | CYRILLIC SMALL LETTER DZELO                            |\n",
      "| U+A645      | ꙅ      | 0xEA 0x99 0x85      |      1 | CYRILLIC SMALL LETTER REVERSED DZE                     |\n",
      "| U+A647      | ꙇ      | 0xEA 0x99 0x87      |      1 | CYRILLIC SMALL LETTER IOTA                             |\n",
      "| U+A649      | ꙉ      | 0xEA 0x99 0x89      |      1 | CYRILLIC SMALL LETTER DJERV                            |\n",
      "| U+A64D      | ꙍ      | 0xEA 0x99 0x8D      |      1 | CYRILLIC SMALL LETTER BROAD OMEGA                      |\n",
      "| U+A64F      | ꙏ      | 0xEA 0x99 0x8F      |      1 | CYRILLIC SMALL LETTER NEUTRAL YER                      |\n",
      "| U+A651      | ꙑ      | 0xEA 0x99 0x91      |      1 | CYRILLIC SMALL LETTER YERU WITH BACK YER               |\n",
      "| U+A653      | ꙓ      | 0xEA 0x99 0x93      |      1 | CYRILLIC SMALL LETTER IOTIFIED YAT                     |\n",
      "| U+A655      | ꙕ      | 0xEA 0x99 0x95      |      1 | CYRILLIC SMALL LETTER REVERSED YU                      |\n",
      "| U+A657      | ꙗ      | 0xEA 0x99 0x97      |      1 | CYRILLIC SMALL LETTER IOTIFIED A                       |\n",
      "| U+A659      | ꙙ      | 0xEA 0x99 0x99      |      1 | CYRILLIC SMALL LETTER CLOSED LITTLE YUS                |\n",
      "| U+A65B      | ꙛ      | 0xEA 0x99 0x9B      |      1 | CYRILLIC SMALL LETTER BLENDED YUS                      |\n",
      "| U+A65D      | ꙝ      | 0xEA 0x99 0x9D      |      1 | CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS       |\n",
      "| U+A65F      | ꙟ      | 0xEA 0x99 0x9F      |      1 | CYRILLIC SMALL LETTER YN                               |\n",
      "| U+A661      | ꙡ      | 0xEA 0x99 0xA1      |      1 | CYRILLIC SMALL LETTER REVERSED TSE                     |\n",
      "| U+A663      | ꙣ      | 0xEA 0x99 0xA3      |      1 | CYRILLIC SMALL LETTER SOFT DE                          |\n",
      "| U+A665      | ꙥ      | 0xEA 0x99 0xA5      |      1 | CYRILLIC SMALL LETTER SOFT EL                          |\n",
      "| U+A667      | ꙧ      | 0xEA 0x99 0xA7      |      1 | CYRILLIC SMALL LETTER SOFT EM                          |\n",
      "| U+A669      | ꙩ      | 0xEA 0x99 0xA9      |      1 | CYRILLIC SMALL LETTER MONOCULAR O                      |\n",
      "| U+A66B      | ꙫ      | 0xEA 0x99 0xAB      |      1 | CYRILLIC SMALL LETTER BINOCULAR O                      |\n",
      "| U+A66D      | ꙭ      | 0xEA 0x99 0xAD      |      1 | CYRILLIC SMALL LETTER DOUBLE MONOCULAR O               |\n",
      "| U+A681      | ꚁ      | 0xEA 0x9A 0x81      |      1 | CYRILLIC SMALL LETTER DWE                              |\n",
      "| U+A683      | ꚃ      | 0xEA 0x9A 0x83      |      1 | CYRILLIC SMALL LETTER DZWE                             |\n",
      "| U+A685      | ꚅ      | 0xEA 0x9A 0x85      |      1 | CYRILLIC SMALL LETTER ZHWE                             |\n",
      "| U+A687      | ꚇ      | 0xEA 0x9A 0x87      |      1 | CYRILLIC SMALL LETTER CCHE                             |\n",
      "| U+A689      | ꚉ      | 0xEA 0x9A 0x89      |      1 | CYRILLIC SMALL LETTER DZZE                             |\n",
      "| U+A68B      | ꚋ      | 0xEA 0x9A 0x8B      |      1 | CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK              |\n",
      "| U+A68D      | ꚍ      | 0xEA 0x9A 0x8D      |      1 | CYRILLIC SMALL LETTER TWE                              |\n",
      "| U+A68F      | ꚏ      | 0xEA 0x9A 0x8F      |      1 | CYRILLIC SMALL LETTER TSWE                             |\n",
      "| U+A691      | ꚑ      | 0xEA 0x9A 0x91      |      1 | CYRILLIC SMALL LETTER TSSE                             |\n",
      "| U+A693      | ꚓ      | 0xEA 0x9A 0x93      |      1 | CYRILLIC SMALL LETTER TCHE                             |\n",
      "| U+A695      | ꚕ      | 0xEA 0x9A 0x95      |      1 | CYRILLIC SMALL LETTER HWE                              |\n",
      "| U+A697      | ꚗ      | 0xEA 0x9A 0x97      |      1 | CYRILLIC SMALL LETTER SHWE                             |\n",
      "| U+A699      | ꚙ      | 0xEA 0x9A 0x99      |      1 | CYRILLIC SMALL LETTER DOUBLE O                         |\n",
      "| U+A69B      | ꚛ      | 0xEA 0x9A 0x9B      |      1 | CYRILLIC SMALL LETTER CROSSED O                        |\n",
      "| U+A723      | ꜣ      | 0xEA 0x9C 0xA3      |      1 | LATIN SMALL LETTER EGYPTOLOGICAL ALEF                  |\n",
      "| U+A725      | ꜥ      | 0xEA 0x9C 0xA5      |      1 | LATIN SMALL LETTER EGYPTOLOGICAL AIN                   |\n",
      "| U+A727      | ꜧ      | 0xEA 0x9C 0xA7      |      1 | LATIN SMALL LETTER HENG                                |\n",
      "| U+A729      | ꜩ      | 0xEA 0x9C 0xA9      |      1 | LATIN SMALL LETTER TZ                                  |\n",
      "| U+A72B      | ꜫ      | 0xEA 0x9C 0xAB      |      1 | LATIN SMALL LETTER TRESILLO                            |\n",
      "| U+A72D      | ꜭ      | 0xEA 0x9C 0xAD      |      1 | LATIN SMALL LETTER CUATRILLO                           |\n",
      "| U+A72F      | ꜯ      | 0xEA 0x9C 0xAF      |      1 | LATIN SMALL LETTER CUATRILLO WITH COMMA                |\n",
      "| U+A733      | ꜳ      | 0xEA 0x9C 0xB3      |      1 | LATIN SMALL LETTER AA                                  |\n",
      "| U+A735      | ꜵ      | 0xEA 0x9C 0xB5      |      1 | LATIN SMALL LETTER AO                                  |\n",
      "| U+A737      | ꜷ      | 0xEA 0x9C 0xB7      |      1 | LATIN SMALL LETTER AU                                  |\n",
      "| U+A739      | ꜹ      | 0xEA 0x9C 0xB9      |      1 | LATIN SMALL LETTER AV                                  |\n",
      "| U+A73B      | ꜻ      | 0xEA 0x9C 0xBB      |      1 | LATIN SMALL LETTER AV WITH HORIZONTAL BAR              |\n",
      "| U+A73D      | ꜽ      | 0xEA 0x9C 0xBD      |      1 | LATIN SMALL LETTER AY                                  |\n",
      "| U+A73F      | ꜿ      | 0xEA 0x9C 0xBF      |      1 | LATIN SMALL LETTER REVERSED C WITH DOT                 |\n",
      "| U+A741      | ꝁ      | 0xEA 0x9D 0x81      |      1 | LATIN SMALL LETTER K WITH STROKE                       |\n",
      "| U+A743      | ꝃ      | 0xEA 0x9D 0x83      |      1 | LATIN SMALL LETTER K WITH DIAGONAL STROKE              |\n",
      "| U+A745      | ꝅ      | 0xEA 0x9D 0x85      |      1 | LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE   |\n",
      "| U+A747      | ꝇ      | 0xEA 0x9D 0x87      |      1 | LATIN SMALL LETTER BROKEN L                            |\n",
      "| U+A749      | ꝉ      | 0xEA 0x9D 0x89      |      1 | LATIN SMALL LETTER L WITH HIGH STROKE                  |\n",
      "| U+A74B      | ꝋ      | 0xEA 0x9D 0x8B      |      1 | LATIN SMALL LETTER O WITH LONG STROKE OVERLAY          |\n",
      "| U+A74D      | ꝍ      | 0xEA 0x9D 0x8D      |      1 | LATIN SMALL LETTER O WITH LOOP                         |\n",
      "| U+A74F      | ꝏ      | 0xEA 0x9D 0x8F      |      1 | LATIN SMALL LETTER OO                                  |\n",
      "| U+A751      | ꝑ      | 0xEA 0x9D 0x91      |      1 | LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER     |\n",
      "| U+A753      | ꝓ      | 0xEA 0x9D 0x93      |      1 | LATIN SMALL LETTER P WITH FLOURISH                     |\n",
      "| U+A755      | ꝕ      | 0xEA 0x9D 0x95      |      1 | LATIN SMALL LETTER P WITH SQUIRREL TAIL                |\n",
      "| U+A757      | ꝗ      | 0xEA 0x9D 0x97      |      1 | LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER     |\n",
      "| U+A759      | ꝙ      | 0xEA 0x9D 0x99      |      1 | LATIN SMALL LETTER Q WITH DIAGONAL STROKE              |\n",
      "| U+A75B      | ꝛ      | 0xEA 0x9D 0x9B      |      1 | LATIN SMALL LETTER R ROTUNDA                           |\n",
      "| U+A75D      | ꝝ      | 0xEA 0x9D 0x9D      |      1 | LATIN SMALL LETTER RUM ROTUNDA                         |\n",
      "| U+A75F      | ꝟ      | 0xEA 0x9D 0x9F      |      1 | LATIN SMALL LETTER V WITH DIAGONAL STROKE              |\n",
      "| U+A761      | ꝡ      | 0xEA 0x9D 0xA1      |      1 | LATIN SMALL LETTER VY                                  |\n",
      "| U+A763      | ꝣ      | 0xEA 0x9D 0xA3      |      1 | LATIN SMALL LETTER VISIGOTHIC Z                        |\n",
      "| U+A765      | ꝥ      | 0xEA 0x9D 0xA5      |      1 | LATIN SMALL LETTER THORN WITH STROKE                   |\n",
      "| U+A767      | ꝧ      | 0xEA 0x9D 0xA7      |      1 | LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER |\n",
      "| U+A769      | ꝩ      | 0xEA 0x9D 0xA9      |      1 | LATIN SMALL LETTER VEND                                |\n",
      "| U+A76B      | ꝫ      | 0xEA 0x9D 0xAB      |      1 | LATIN SMALL LETTER ET                                  |\n",
      "| U+A76D      | ꝭ      | 0xEA 0x9D 0xAD      |      1 | LATIN SMALL LETTER IS                                  |\n",
      "| U+A76F      | ꝯ      | 0xEA 0x9D 0xAF      |      1 | LATIN SMALL LETTER CON                                 |\n",
      "| U+A77A      | ꝺ      | 0xEA 0x9D 0xBA      |      1 | LATIN SMALL LETTER INSULAR D                           |\n",
      "| U+A77C      | ꝼ      | 0xEA 0x9D 0xBC      |      1 | LATIN SMALL LETTER INSULAR F                           |\n",
      "| U+1D79      | ᵹ      | 0xE1 0xB5 0xB9      |      1 | LATIN SMALL LETTER INSULAR G                           |\n",
      "| U+A77F      | ꝿ      | 0xEA 0x9D 0xBF      |      1 | LATIN SMALL LETTER TURNED INSULAR G                    |\n",
      "| U+A781      | ꞁ      | 0xEA 0x9E 0x81      |      1 | LATIN SMALL LETTER TURNED L                            |\n",
      "| U+A783      | ꞃ      | 0xEA 0x9E 0x83      |      1 | LATIN SMALL LETTER INSULAR R                           |\n",
      "| U+A785      | ꞅ      | 0xEA 0x9E 0x85      |      1 | LATIN SMALL LETTER INSULAR S                           |\n",
      "| U+A787      | ꞇ      | 0xEA 0x9E 0x87      |      1 | LATIN SMALL LETTER INSULAR T                           |\n",
      "| U+A78C      | ꞌ      | 0xEA 0x9E 0x8C      |      1 | LATIN SMALL LETTER SALTILLO                            |\n",
      "| U+0265      | ɥ      | 0xC9 0xA5           |      1 | LATIN SMALL LETTER TURNED H                            |\n",
      "| U+A791      | ꞑ      | 0xEA 0x9E 0x91      |      1 | LATIN SMALL LETTER N WITH DESCENDER                    |\n",
      "| U+A793      | ꞓ      | 0xEA 0x9E 0x93      |      1 | LATIN SMALL LETTER C WITH BAR                          |\n",
      "| U+A797      | ꞗ      | 0xEA 0x9E 0x97      |      1 | LATIN SMALL LETTER B WITH FLOURISH                     |\n",
      "| U+A799      | ꞙ      | 0xEA 0x9E 0x99      |      1 | LATIN SMALL LETTER F WITH STROKE                       |\n",
      "| U+A79B      | ꞛ      | 0xEA 0x9E 0x9B      |      1 | LATIN SMALL LETTER VOLAPUK AE                          |\n",
      "| U+A79D      | ꞝ      | 0xEA 0x9E 0x9D      |      1 | LATIN SMALL LETTER VOLAPUK OE                          |\n",
      "| U+A79F      | ꞟ      | 0xEA 0x9E 0x9F      |      1 | LATIN SMALL LETTER VOLAPUK UE                          |\n",
      "| U+A7A1      | ꞡ      | 0xEA 0x9E 0xA1      |      1 | LATIN SMALL LETTER G WITH OBLIQUE STROKE               |\n",
      "| U+A7A3      | ꞣ      | 0xEA 0x9E 0xA3      |      1 | LATIN SMALL LETTER K WITH OBLIQUE STROKE               |\n",
      "| U+A7A5      | ꞥ      | 0xEA 0x9E 0xA5      |      1 | LATIN SMALL LETTER N WITH OBLIQUE STROKE               |\n",
      "| U+A7A7      | ꞧ      | 0xEA 0x9E 0xA7      |      1 | LATIN SMALL LETTER R WITH OBLIQUE STROKE               |\n",
      "| U+A7A9      | ꞩ      | 0xEA 0x9E 0xA9      |      1 | LATIN SMALL LETTER S WITH OBLIQUE STROKE               |\n",
      "| U+0266      | ɦ      | 0xC9 0xA6           |      1 | LATIN SMALL LETTER H WITH HOOK                         |\n",
      "| U+025C      | ɜ      | 0xC9 0x9C           |      1 | LATIN SMALL LETTER REVERSED OPEN E                     |\n",
      "| U+0261      | ɡ      | 0xC9 0xA1           |      1 | LATIN SMALL LETTER SCRIPT G                            |\n",
      "| U+026C      | ɬ      | 0xC9 0xAC           |      1 | LATIN SMALL LETTER L WITH BELT                         |\n",
      "| U+026A      | ɪ      | 0xC9 0xAA           |      1 | LATIN LETTER SMALL CAPITAL I                           |\n",
      "| U+029E      | ʞ      | 0xCA 0x9E           |      1 | LATIN SMALL LETTER TURNED K                            |\n",
      "| U+0287      | ʇ      | 0xCA 0x87           |      1 | LATIN SMALL LETTER TURNED T                            |\n",
      "| U+029D      | ʝ      | 0xCA 0x9D           |      1 | LATIN SMALL LETTER J WITH CROSSED-TAIL                 |\n",
      "| U+AB53      | ꭓ      | 0xEA 0xAD 0x93      |      1 | LATIN SMALL LETTER CHI                                 |\n",
      "| U+A7B5      | ꞵ      | 0xEA 0x9E 0xB5      |      1 | LATIN SMALL LETTER BETA                                |\n",
      "| U+A7B7      | ꞷ      | 0xEA 0x9E 0xB7      |      1 | LATIN SMALL LETTER OMEGA                               |\n",
      "| U+A7B9      | ꞹ      | 0xEA 0x9E 0xB9      |      1 | LATIN SMALL LETTER U WITH STROKE                       |\n",
      "| U+A7BB      | ꞻ      | 0xEA 0x9E 0xBB      |      1 | LATIN SMALL LETTER GLOTTAL A                           |\n",
      "| U+A7BD      | ꞽ      | 0xEA 0x9E 0xBD      |      1 | LATIN SMALL LETTER GLOTTAL I                           |\n",
      "| U+A7BF      | ꞿ      | 0xEA 0x9E 0xBF      |      1 | LATIN SMALL LETTER GLOTTAL U                           |\n",
      "| U+A7C1      | ꟁ      | 0xEA 0x9F 0x81      |      1 | LATIN SMALL LETTER OLD POLISH O                        |\n",
      "| U+A7C3      | ꟃ      | 0xEA 0x9F 0x83      |      1 | LATIN SMALL LETTER ANGLICANA W                         |\n",
      "| U+A794      | ꞔ      | 0xEA 0x9E 0x94      |      1 | LATIN SMALL LETTER C WITH PALATAL HOOK                 |\n",
      "| U+0282      | ʂ      | 0xCA 0x82           |      1 | LATIN SMALL LETTER S WITH HOOK                         |\n",
      "| U+1D8E      | ᶎ      | 0xE1 0xB6 0x8E      |      1 | LATIN SMALL LETTER Z WITH PALATAL HOOK                 |\n",
      "| U+A7C8      | ꟈ      | 0xEA 0x9F 0x88      |      1 | LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY         |\n",
      "| U+A7CA      | ꟊ      | 0xEA 0x9F 0x8A      |      1 | LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY         |\n",
      "| U+0264      | ɤ      | 0xC9 0xA4           |      1 | LATIN SMALL LETTER RAMS HORN                           |\n",
      "| U+A7CD      | ꟍ      | 0xEA 0x9F 0x8D      |      1 |                                                        |\n",
      "| U+A7CF      | ꟏      | 0xEA 0x9F 0x8F      |      1 |                                                        |\n",
      "| U+A7D1      | ꟑ      | 0xEA 0x9F 0x91      |      1 | LATIN SMALL LETTER CLOSED INSULAR G                    |\n",
      "| U+A7D3      | ꟓ      | 0xEA 0x9F 0x93      |      1 | LATIN SMALL LETTER DOUBLE THORN                        |\n",
      "| U+A7D5      | ꟕ      | 0xEA 0x9F 0x95      |      1 | LATIN SMALL LETTER DOUBLE WYNN                         |\n",
      "| U+A7D7      | ꟗ      | 0xEA 0x9F 0x97      |      1 | LATIN SMALL LETTER MIDDLE SCOTS S                      |\n",
      "| U+A7D9      | ꟙ      | 0xEA 0x9F 0x99      |      1 | LATIN SMALL LETTER SIGMOID S                           |\n",
      "| U+A7DB      | ꟛ      | 0xEA 0x9F 0x9B      |      1 |                                                        |\n",
      "| U+019B      | ƛ      | 0xC6 0x9B           |      1 | LATIN SMALL LETTER LAMBDA WITH STROKE                  |\n",
      "| U+A7F6      | ꟶ      | 0xEA 0x9F 0xB6      |      1 | LATIN SMALL LETTER REVERSED HALF H                     |\n",
      "| U+13A0      | Ꭰ      | 0xE1 0x8E 0xA0      |      1 | CHEROKEE LETTER A                                      |\n",
      "| U+13A1      | Ꭱ      | 0xE1 0x8E 0xA1      |      1 | CHEROKEE LETTER E                                      |\n",
      "| U+13A2      | Ꭲ      | 0xE1 0x8E 0xA2      |      1 | CHEROKEE LETTER I                                      |\n",
      "| U+13A3      | Ꭳ      | 0xE1 0x8E 0xA3      |      1 | CHEROKEE LETTER O                                      |\n",
      "| U+13A4      | Ꭴ      | 0xE1 0x8E 0xA4      |      1 | CHEROKEE LETTER U                                      |\n",
      "| U+13A5      | Ꭵ      | 0xE1 0x8E 0xA5      |      1 | CHEROKEE LETTER V                                      |\n",
      "| U+13A6      | Ꭶ      | 0xE1 0x8E 0xA6      |      1 | CHEROKEE LETTER GA                                     |\n",
      "| U+13A7      | Ꭷ      | 0xE1 0x8E 0xA7      |      1 | CHEROKEE LETTER KA                                     |\n",
      "| U+13A8      | Ꭸ      | 0xE1 0x8E 0xA8      |      1 | CHEROKEE LETTER GE                                     |\n",
      "| U+13A9      | Ꭹ      | 0xE1 0x8E 0xA9      |      1 | CHEROKEE LETTER GI                                     |\n",
      "| U+13AA      | Ꭺ      | 0xE1 0x8E 0xAA      |      1 | CHEROKEE LETTER GO                                     |\n",
      "| U+13AB      | Ꭻ      | 0xE1 0x8E 0xAB      |      1 | CHEROKEE LETTER GU                                     |\n",
      "| U+13AC      | Ꭼ      | 0xE1 0x8E 0xAC      |      1 | CHEROKEE LETTER GV                                     |\n",
      "| U+13AD      | Ꭽ      | 0xE1 0x8E 0xAD      |      1 | CHEROKEE LETTER HA                                     |\n",
      "| U+13AE      | Ꭾ      | 0xE1 0x8E 0xAE      |      1 | CHEROKEE LETTER HE                                     |\n",
      "| U+13AF      | Ꭿ      | 0xE1 0x8E 0xAF      |      1 | CHEROKEE LETTER HI                                     |\n",
      "| U+13B0      | Ꮀ      | 0xE1 0x8E 0xB0      |      1 | CHEROKEE LETTER HO                                     |\n",
      "| U+13B1      | Ꮁ      | 0xE1 0x8E 0xB1      |      1 | CHEROKEE LETTER HU                                     |\n",
      "| U+13B2      | Ꮂ      | 0xE1 0x8E 0xB2      |      1 | CHEROKEE LETTER HV                                     |\n",
      "| U+13B3      | Ꮃ      | 0xE1 0x8E 0xB3      |      1 | CHEROKEE LETTER LA                                     |\n",
      "| U+13B4      | Ꮄ      | 0xE1 0x8E 0xB4      |      1 | CHEROKEE LETTER LE                                     |\n",
      "| U+13B5      | Ꮅ      | 0xE1 0x8E 0xB5      |      1 | CHEROKEE LETTER LI                                     |\n",
      "| U+13B6      | Ꮆ      | 0xE1 0x8E 0xB6      |      1 | CHEROKEE LETTER LO                                     |\n",
      "| U+13B7      | Ꮇ      | 0xE1 0x8E 0xB7      |      1 | CHEROKEE LETTER LU                                     |\n",
      "| U+13B8      | Ꮈ      | 0xE1 0x8E 0xB8      |      1 | CHEROKEE LETTER LV                                     |\n",
      "| U+13B9      | Ꮉ      | 0xE1 0x8E 0xB9      |      1 | CHEROKEE LETTER MA                                     |\n",
      "| U+13BA      | Ꮊ      | 0xE1 0x8E 0xBA      |      1 | CHEROKEE LETTER ME                                     |\n",
      "| U+13BB      | Ꮋ      | 0xE1 0x8E 0xBB      |      1 | CHEROKEE LETTER MI                                     |\n",
      "| U+13BC      | Ꮌ      | 0xE1 0x8E 0xBC      |      1 | CHEROKEE LETTER MO                                     |\n",
      "| U+13BD      | Ꮍ      | 0xE1 0x8E 0xBD      |      1 | CHEROKEE LETTER MU                                     |\n",
      "| U+13BE      | Ꮎ      | 0xE1 0x8E 0xBE      |      1 | CHEROKEE LETTER NA                                     |\n",
      "| U+13BF      | Ꮏ      | 0xE1 0x8E 0xBF      |      1 | CHEROKEE LETTER HNA                                    |\n",
      "| U+13C0      | Ꮐ      | 0xE1 0x8F 0x80      |      1 | CHEROKEE LETTER NAH                                    |\n",
      "| U+13C1      | Ꮑ      | 0xE1 0x8F 0x81      |      1 | CHEROKEE LETTER NE                                     |\n",
      "| U+13C2      | Ꮒ      | 0xE1 0x8F 0x82      |      1 | CHEROKEE LETTER NI                                     |\n",
      "| U+13C3      | Ꮓ      | 0xE1 0x8F 0x83      |      1 | CHEROKEE LETTER NO                                     |\n",
      "| U+13C4      | Ꮔ      | 0xE1 0x8F 0x84      |      1 | CHEROKEE LETTER NU                                     |\n",
      "| U+13C5      | Ꮕ      | 0xE1 0x8F 0x85      |      1 | CHEROKEE LETTER NV                                     |\n",
      "| U+13C6      | Ꮖ      | 0xE1 0x8F 0x86      |      1 | CHEROKEE LETTER QUA                                    |\n",
      "| U+13C7      | Ꮗ      | 0xE1 0x8F 0x87      |      1 | CHEROKEE LETTER QUE                                    |\n",
      "| U+13C8      | Ꮘ      | 0xE1 0x8F 0x88      |      1 | CHEROKEE LETTER QUI                                    |\n",
      "| U+13C9      | Ꮙ      | 0xE1 0x8F 0x89      |      1 | CHEROKEE LETTER QUO                                    |\n",
      "| U+13CA      | Ꮚ      | 0xE1 0x8F 0x8A      |      1 | CHEROKEE LETTER QUU                                    |\n",
      "| U+13CB      | Ꮛ      | 0xE1 0x8F 0x8B      |      1 | CHEROKEE LETTER QUV                                    |\n",
      "| U+13CC      | Ꮜ      | 0xE1 0x8F 0x8C      |      1 | CHEROKEE LETTER SA                                     |\n",
      "| U+13CD      | Ꮝ      | 0xE1 0x8F 0x8D      |      1 | CHEROKEE LETTER S                                      |\n",
      "| U+13CE      | Ꮞ      | 0xE1 0x8F 0x8E      |      1 | CHEROKEE LETTER SE                                     |\n",
      "| U+13CF      | Ꮟ      | 0xE1 0x8F 0x8F      |      1 | CHEROKEE LETTER SI                                     |\n",
      "| U+13D0      | Ꮠ      | 0xE1 0x8F 0x90      |      1 | CHEROKEE LETTER SO                                     |\n",
      "| U+13D1      | Ꮡ      | 0xE1 0x8F 0x91      |      1 | CHEROKEE LETTER SU                                     |\n",
      "| U+13D2      | Ꮢ      | 0xE1 0x8F 0x92      |      1 | CHEROKEE LETTER SV                                     |\n",
      "| U+13D3      | Ꮣ      | 0xE1 0x8F 0x93      |      1 | CHEROKEE LETTER DA                                     |\n",
      "| U+13D4      | Ꮤ      | 0xE1 0x8F 0x94      |      1 | CHEROKEE LETTER TA                                     |\n",
      "| U+13D5      | Ꮥ      | 0xE1 0x8F 0x95      |      1 | CHEROKEE LETTER DE                                     |\n",
      "| U+13D6      | Ꮦ      | 0xE1 0x8F 0x96      |      1 | CHEROKEE LETTER TE                                     |\n",
      "| U+13D7      | Ꮧ      | 0xE1 0x8F 0x97      |      1 | CHEROKEE LETTER DI                                     |\n",
      "| U+13D8      | Ꮨ      | 0xE1 0x8F 0x98      |      1 | CHEROKEE LETTER TI                                     |\n",
      "| U+13D9      | Ꮩ      | 0xE1 0x8F 0x99      |      1 | CHEROKEE LETTER DO                                     |\n",
      "| U+13DA      | Ꮪ      | 0xE1 0x8F 0x9A      |      1 | CHEROKEE LETTER DU                                     |\n",
      "| U+13DB      | Ꮫ      | 0xE1 0x8F 0x9B      |      1 | CHEROKEE LETTER DV                                     |\n",
      "| U+13DC      | Ꮬ      | 0xE1 0x8F 0x9C      |      1 | CHEROKEE LETTER DLA                                    |\n",
      "| U+13DD      | Ꮭ      | 0xE1 0x8F 0x9D      |      1 | CHEROKEE LETTER TLA                                    |\n",
      "| U+13DE      | Ꮮ      | 0xE1 0x8F 0x9E      |      1 | CHEROKEE LETTER TLE                                    |\n",
      "| U+13DF      | Ꮯ      | 0xE1 0x8F 0x9F      |      1 | CHEROKEE LETTER TLI                                    |\n",
      "| U+13E0      | Ꮰ      | 0xE1 0x8F 0xA0      |      1 | CHEROKEE LETTER TLO                                    |\n",
      "| U+13E1      | Ꮱ      | 0xE1 0x8F 0xA1      |      1 | CHEROKEE LETTER TLU                                    |\n",
      "| U+13E2      | Ꮲ      | 0xE1 0x8F 0xA2      |      1 | CHEROKEE LETTER TLV                                    |\n",
      "| U+13E3      | Ꮳ      | 0xE1 0x8F 0xA3      |      1 | CHEROKEE LETTER TSA                                    |\n",
      "| U+13E4      | Ꮴ      | 0xE1 0x8F 0xA4      |      1 | CHEROKEE LETTER TSE                                    |\n",
      "| U+13E5      | Ꮵ      | 0xE1 0x8F 0xA5      |      1 | CHEROKEE LETTER TSI                                    |\n",
      "| U+13E6      | Ꮶ      | 0xE1 0x8F 0xA6      |      1 | CHEROKEE LETTER TSO                                    |\n",
      "| U+13E7      | Ꮷ      | 0xE1 0x8F 0xA7      |      1 | CHEROKEE LETTER TSU                                    |\n",
      "| U+13E8      | Ꮸ      | 0xE1 0x8F 0xA8      |      1 | CHEROKEE LETTER TSV                                    |\n",
      "| U+13E9      | Ꮹ      | 0xE1 0x8F 0xA9      |      1 | CHEROKEE LETTER WA                                     |\n",
      "| U+13EA      | Ꮺ      | 0xE1 0x8F 0xAA      |      1 | CHEROKEE LETTER WE                                     |\n",
      "| U+13EB      | Ꮻ      | 0xE1 0x8F 0xAB      |      1 | CHEROKEE LETTER WI                                     |\n",
      "| U+13EC      | Ꮼ      | 0xE1 0x8F 0xAC      |      1 | CHEROKEE LETTER WO                                     |\n",
      "| U+13ED      | Ꮽ      | 0xE1 0x8F 0xAD      |      1 | CHEROKEE LETTER WU                                     |\n",
      "| U+13EE      | Ꮾ      | 0xE1 0x8F 0xAE      |      1 | CHEROKEE LETTER WV                                     |\n",
      "| U+13EF      | Ꮿ      | 0xE1 0x8F 0xAF      |      1 | CHEROKEE LETTER YA                                     |\n",
      "| U+FF41      | ａ     | 0xEF 0xBD 0x81      |      1 | FULLWIDTH LATIN SMALL LETTER A                         |\n",
      "| U+FF42      | ｂ     | 0xEF 0xBD 0x82      |      1 | FULLWIDTH LATIN SMALL LETTER B                         |\n",
      "| U+FF43      | ｃ     | 0xEF 0xBD 0x83      |      1 | FULLWIDTH LATIN SMALL LETTER C                         |\n",
      "| U+FF44      | ｄ     | 0xEF 0xBD 0x84      |      1 | FULLWIDTH LATIN SMALL LETTER D                         |\n",
      "| U+FF45      | ｅ     | 0xEF 0xBD 0x85      |      1 | FULLWIDTH LATIN SMALL LETTER E                         |\n",
      "| U+FF46      | ｆ     | 0xEF 0xBD 0x86      |      1 | FULLWIDTH LATIN SMALL LETTER F                         |\n",
      "| U+FF47      | ｇ     | 0xEF 0xBD 0x87      |      1 | FULLWIDTH LATIN SMALL LETTER G                         |\n",
      "| U+FF48      | ｈ     | 0xEF 0xBD 0x88      |      1 | FULLWIDTH LATIN SMALL LETTER H                         |\n",
      "| U+FF49      | ｉ     | 0xEF 0xBD 0x89      |      1 | FULLWIDTH LATIN SMALL LETTER I                         |\n",
      "| U+FF4A      | ｊ     | 0xEF 0xBD 0x8A      |      1 | FULLWIDTH LATIN SMALL LETTER J                         |\n",
      "| U+FF4B      | ｋ     | 0xEF 0xBD 0x8B      |      1 | FULLWIDTH LATIN SMALL LETTER K                         |\n",
      "| U+FF4C      | ｌ     | 0xEF 0xBD 0x8C      |      1 | FULLWIDTH LATIN SMALL LETTER L                         |\n",
      "| U+FF4D      | ｍ     | 0xEF 0xBD 0x8D      |      1 | FULLWIDTH LATIN SMALL LETTER M                         |\n",
      "| U+FF4E      | ｎ     | 0xEF 0xBD 0x8E      |      1 | FULLWIDTH LATIN SMALL LETTER N                         |\n",
      "| U+FF4F      | ｏ     | 0xEF 0xBD 0x8F      |      1 | FULLWIDTH LATIN SMALL LETTER O                         |\n",
      "| U+FF50      | ｐ     | 0xEF 0xBD 0x90      |      1 | FULLWIDTH LATIN SMALL LETTER P                         |\n",
      "| U+FF51      | ｑ     | 0xEF 0xBD 0x91      |      1 | FULLWIDTH LATIN SMALL LETTER Q                         |\n",
      "| U+FF52      | ｒ     | 0xEF 0xBD 0x92      |      1 | FULLWIDTH LATIN SMALL LETTER R                         |\n",
      "| U+FF53      | ｓ     | 0xEF 0xBD 0x93      |      1 | FULLWIDTH LATIN SMALL LETTER S                         |\n",
      "| U+FF54      | ｔ     | 0xEF 0xBD 0x94      |      1 | FULLWIDTH LATIN SMALL LETTER T                         |\n",
      "| U+FF55      | ｕ     | 0xEF 0xBD 0x95      |      1 | FULLWIDTH LATIN SMALL LETTER U                         |\n",
      "| U+FF56      | ｖ     | 0xEF 0xBD 0x96      |      1 | FULLWIDTH LATIN SMALL LETTER V                         |\n",
      "| U+FF57      | ｗ     | 0xEF 0xBD 0x97      |      1 | FULLWIDTH LATIN SMALL LETTER W                         |\n",
      "| U+FF58      | ｘ     | 0xEF 0xBD 0x98      |      1 | FULLWIDTH LATIN SMALL LETTER X                         |\n",
      "| U+FF59      | ｙ     | 0xEF 0xBD 0x99      |      1 | FULLWIDTH LATIN SMALL LETTER Y                         |\n",
      "| U+FF5A      | ｚ     | 0xEF 0xBD 0x9A      |      1 | FULLWIDTH LATIN SMALL LETTER Z                         |\n",
      "| U+10428     | 𐐨      | 0xF0 0x90 0x90 0xA8 |      1 | DESERET SMALL LETTER LONG I                            |\n",
      "| U+10429     | 𐐩      | 0xF0 0x90 0x90 0xA9 |      1 | DESERET SMALL LETTER LONG E                            |\n",
      "| U+1042A     | 𐐪      | 0xF0 0x90 0x90 0xAA |      1 | DESERET SMALL LETTER LONG A                            |\n",
      "| U+1042B     | 𐐫      | 0xF0 0x90 0x90 0xAB |      1 | DESERET SMALL LETTER LONG AH                           |\n",
      "| U+1042C     | 𐐬      | 0xF0 0x90 0x90 0xAC |      1 | DESERET SMALL LETTER LONG O                            |\n",
      "| U+1042D     | 𐐭      | 0xF0 0x90 0x90 0xAD |      1 | DESERET SMALL LETTER LONG OO                           |\n",
      "| U+1042E     | 𐐮      | 0xF0 0x90 0x90 0xAE |      1 | DESERET SMALL LETTER SHORT I                           |\n",
      "| U+1042F     | 𐐯      | 0xF0 0x90 0x90 0xAF |      1 | DESERET SMALL LETTER SHORT E                           |\n",
      "| U+10430     | 𐐰      | 0xF0 0x90 0x90 0xB0 |      1 | DESERET SMALL LETTER SHORT A                           |\n",
      "| U+10431     | 𐐱      | 0xF0 0x90 0x90 0xB1 |      1 | DESERET SMALL LETTER SHORT AH                          |\n",
      "| U+10432     | 𐐲      | 0xF0 0x90 0x90 0xB2 |      1 | DESERET SMALL LETTER SHORT O                           |\n",
      "| U+10433     | 𐐳      | 0xF0 0x90 0x90 0xB3 |      1 | DESERET SMALL LETTER SHORT OO                          |\n",
      "| U+10434     | 𐐴      | 0xF0 0x90 0x90 0xB4 |      1 | DESERET SMALL LETTER AY                                |\n",
      "| U+10435     | 𐐵      | 0xF0 0x90 0x90 0xB5 |      1 | DESERET SMALL LETTER OW                                |\n",
      "| U+10436     | 𐐶      | 0xF0 0x90 0x90 0xB6 |      1 | DESERET SMALL LETTER WU                                |\n",
      "| U+10437     | 𐐷      | 0xF0 0x90 0x90 0xB7 |      1 | DESERET SMALL LETTER YEE                               |\n",
      "| U+10438     | 𐐸      | 0xF0 0x90 0x90 0xB8 |      1 | DESERET SMALL LETTER H                                 |\n",
      "| U+10439     | 𐐹      | 0xF0 0x90 0x90 0xB9 |      1 | DESERET SMALL LETTER PEE                               |\n",
      "| U+1043A     | 𐐺      | 0xF0 0x90 0x90 0xBA |      1 | DESERET SMALL LETTER BEE                               |\n",
      "| U+1043B     | 𐐻      | 0xF0 0x90 0x90 0xBB |      1 | DESERET SMALL LETTER TEE                               |\n",
      "| U+1043C     | 𐐼      | 0xF0 0x90 0x90 0xBC |      1 | DESERET SMALL LETTER DEE                               |\n",
      "| U+1043D     | 𐐽      | 0xF0 0x90 0x90 0xBD |      1 | DESERET SMALL LETTER CHEE                              |\n",
      "| U+1043E     | 𐐾      | 0xF0 0x90 0x90 0xBE |      1 | DESERET SMALL LETTER JEE                               |\n",
      "| U+1043F     | 𐐿      | 0xF0 0x90 0x90 0xBF |      1 | DESERET SMALL LETTER KAY                               |\n",
      "| U+10440     | 𐑀      | 0xF0 0x90 0x91 0x80 |      1 | DESERET SMALL LETTER GAY                               |\n",
      "| U+10441     | 𐑁      | 0xF0 0x90 0x91 0x81 |      1 | DESERET SMALL LETTER EF                                |\n",
      "| U+10442     | 𐑂      | 0xF0 0x90 0x91 0x82 |      1 | DESERET SMALL LETTER VEE                               |\n",
      "| U+10443     | 𐑃      | 0xF0 0x90 0x91 0x83 |      1 | DESERET SMALL LETTER ETH                               |\n",
      "| U+10444     | 𐑄      | 0xF0 0x90 0x91 0x84 |      1 | DESERET SMALL LETTER THEE                              |\n",
      "| U+10445     | 𐑅      | 0xF0 0x90 0x91 0x85 |      1 | DESERET SMALL LETTER ES                                |\n",
      "| U+10446     | 𐑆      | 0xF0 0x90 0x91 0x86 |      1 | DESERET SMALL LETTER ZEE                               |\n",
      "| U+10447     | 𐑇      | 0xF0 0x90 0x91 0x87 |      1 | DESERET SMALL LETTER ESH                               |\n",
      "| U+10448     | 𐑈      | 0xF0 0x90 0x91 0x88 |      1 | DESERET SMALL LETTER ZHEE                              |\n",
      "| U+10449     | 𐑉      | 0xF0 0x90 0x91 0x89 |      1 | DESERET SMALL LETTER ER                                |\n",
      "| U+1044A     | 𐑊      | 0xF0 0x90 0x91 0x8A |      1 | DESERET SMALL LETTER EL                                |\n",
      "| U+1044B     | 𐑋      | 0xF0 0x90 0x91 0x8B |      1 | DESERET SMALL LETTER EM                                |\n",
      "| U+1044C     | 𐑌      | 0xF0 0x90 0x91 0x8C |      1 | DESERET SMALL LETTER EN                                |\n",
      "| U+1044D     | 𐑍      | 0xF0 0x90 0x91 0x8D |      1 | DESERET SMALL LETTER ENG                               |\n",
      "| U+1044E     | 𐑎      | 0xF0 0x90 0x91 0x8E |      1 | DESERET SMALL LETTER OI                                |\n",
      "| U+1044F     | 𐑏      | 0xF0 0x90 0x91 0x8F |      1 | DESERET SMALL LETTER EW                                |\n",
      "| U+104D8     | 𐓘      | 0xF0 0x90 0x93 0x98 |      1 | OSAGE SMALL LETTER A                                   |\n",
      "| U+104D9     | 𐓙      | 0xF0 0x90 0x93 0x99 |      1 | OSAGE SMALL LETTER AI                                  |\n",
      "| U+104DA     | 𐓚      | 0xF0 0x90 0x93 0x9A |      1 | OSAGE SMALL LETTER AIN                                 |\n",
      "| U+104DB     | 𐓛      | 0xF0 0x90 0x93 0x9B |      1 | OSAGE SMALL LETTER AH                                  |\n",
      "| U+104DC     | 𐓜      | 0xF0 0x90 0x93 0x9C |      1 | OSAGE SMALL LETTER BRA                                 |\n",
      "| U+104DD     | 𐓝      | 0xF0 0x90 0x93 0x9D |      1 | OSAGE SMALL LETTER CHA                                 |\n",
      "| U+104DE     | 𐓞      | 0xF0 0x90 0x93 0x9E |      1 | OSAGE SMALL LETTER EHCHA                               |\n",
      "| U+104DF     | 𐓟      | 0xF0 0x90 0x93 0x9F |      1 | OSAGE SMALL LETTER E                                   |\n",
      "| U+104E0     | 𐓠      | 0xF0 0x90 0x93 0xA0 |      1 | OSAGE SMALL LETTER EIN                                 |\n",
      "| U+104E1     | 𐓡      | 0xF0 0x90 0x93 0xA1 |      1 | OSAGE SMALL LETTER HA                                  |\n",
      "| U+104E2     | 𐓢      | 0xF0 0x90 0x93 0xA2 |      1 | OSAGE SMALL LETTER HYA                                 |\n",
      "| U+104E3     | 𐓣      | 0xF0 0x90 0x93 0xA3 |      1 | OSAGE SMALL LETTER I                                   |\n",
      "| U+104E4     | 𐓤      | 0xF0 0x90 0x93 0xA4 |      1 | OSAGE SMALL LETTER KA                                  |\n",
      "| U+104E5     | 𐓥      | 0xF0 0x90 0x93 0xA5 |      1 | OSAGE SMALL LETTER EHKA                                |\n",
      "| U+104E6     | 𐓦      | 0xF0 0x90 0x93 0xA6 |      1 | OSAGE SMALL LETTER KYA                                 |\n",
      "| U+104E7     | 𐓧      | 0xF0 0x90 0x93 0xA7 |      1 | OSAGE SMALL LETTER LA                                  |\n",
      "| U+104E8     | 𐓨      | 0xF0 0x90 0x93 0xA8 |      1 | OSAGE SMALL LETTER MA                                  |\n",
      "| U+104E9     | 𐓩      | 0xF0 0x90 0x93 0xA9 |      1 | OSAGE SMALL LETTER NA                                  |\n",
      "| U+104EA     | 𐓪      | 0xF0 0x90 0x93 0xAA |      1 | OSAGE SMALL LETTER O                                   |\n",
      "| U+104EB     | 𐓫      | 0xF0 0x90 0x93 0xAB |      1 | OSAGE SMALL LETTER OIN                                 |\n",
      "| U+104EC     | 𐓬      | 0xF0 0x90 0x93 0xAC |      1 | OSAGE SMALL LETTER PA                                  |\n",
      "| U+104ED     | 𐓭      | 0xF0 0x90 0x93 0xAD |      1 | OSAGE SMALL LETTER EHPA                                |\n",
      "| U+104EE     | 𐓮      | 0xF0 0x90 0x93 0xAE |      1 | OSAGE SMALL LETTER SA                                  |\n",
      "| U+104EF     | 𐓯      | 0xF0 0x90 0x93 0xAF |      1 | OSAGE SMALL LETTER SHA                                 |\n",
      "| U+104F0     | 𐓰      | 0xF0 0x90 0x93 0xB0 |      1 | OSAGE SMALL LETTER TA                                  |\n",
      "| U+104F1     | 𐓱      | 0xF0 0x90 0x93 0xB1 |      1 | OSAGE SMALL LETTER EHTA                                |\n",
      "| U+104F2     | 𐓲      | 0xF0 0x90 0x93 0xB2 |      1 | OSAGE SMALL LETTER TSA                                 |\n",
      "| U+104F3     | 𐓳      | 0xF0 0x90 0x93 0xB3 |      1 | OSAGE SMALL LETTER EHTSA                               |\n",
      "| U+104F4     | 𐓴      | 0xF0 0x90 0x93 0xB4 |      1 | OSAGE SMALL LETTER TSHA                                |\n",
      "| U+104F5     | 𐓵      | 0xF0 0x90 0x93 0xB5 |      1 | OSAGE SMALL LETTER DHA                                 |\n",
      "| U+104F6     | 𐓶      | 0xF0 0x90 0x93 0xB6 |      1 | OSAGE SMALL LETTER U                                   |\n",
      "| U+104F7     | 𐓷      | 0xF0 0x90 0x93 0xB7 |      1 | OSAGE SMALL LETTER WA                                  |\n",
      "| U+104F8     | 𐓸      | 0xF0 0x90 0x93 0xB8 |      1 | OSAGE SMALL LETTER KHA                                 |\n",
      "| U+104F9     | 𐓹      | 0xF0 0x90 0x93 0xB9 |      1 | OSAGE SMALL LETTER GHA                                 |\n",
      "| U+104FA     | 𐓺      | 0xF0 0x90 0x93 0xBA |      1 | OSAGE SMALL LETTER ZA                                  |\n",
      "| U+104FB     | 𐓻      | 0xF0 0x90 0x93 0xBB |      1 | OSAGE SMALL LETTER ZHA                                 |\n",
      "| U+10597     | 𐖗      | 0xF0 0x90 0x96 0x97 |      1 | VITHKUQI SMALL LETTER A                                |\n",
      "| U+10598     | 𐖘      | 0xF0 0x90 0x96 0x98 |      1 | VITHKUQI SMALL LETTER BBE                              |\n",
      "| U+10599     | 𐖙      | 0xF0 0x90 0x96 0x99 |      1 | VITHKUQI SMALL LETTER BE                               |\n",
      "| U+1059A     | 𐖚      | 0xF0 0x90 0x96 0x9A |      1 | VITHKUQI SMALL LETTER CE                               |\n",
      "| U+1059B     | 𐖛      | 0xF0 0x90 0x96 0x9B |      1 | VITHKUQI SMALL LETTER CHE                              |\n",
      "| U+1059C     | 𐖜      | 0xF0 0x90 0x96 0x9C |      1 | VITHKUQI SMALL LETTER DE                               |\n",
      "| U+1059D     | 𐖝      | 0xF0 0x90 0x96 0x9D |      1 | VITHKUQI SMALL LETTER DHE                              |\n",
      "| U+1059E     | 𐖞      | 0xF0 0x90 0x96 0x9E |      1 | VITHKUQI SMALL LETTER EI                               |\n",
      "| U+1059F     | 𐖟      | 0xF0 0x90 0x96 0x9F |      1 | VITHKUQI SMALL LETTER E                                |\n",
      "| U+105A0     | 𐖠      | 0xF0 0x90 0x96 0xA0 |      1 | VITHKUQI SMALL LETTER FE                               |\n",
      "| U+105A1     | 𐖡      | 0xF0 0x90 0x96 0xA1 |      1 | VITHKUQI SMALL LETTER GA                               |\n",
      "| U+105A3     | 𐖣      | 0xF0 0x90 0x96 0xA3 |      1 | VITHKUQI SMALL LETTER HA                               |\n",
      "| U+105A4     | 𐖤      | 0xF0 0x90 0x96 0xA4 |      1 | VITHKUQI SMALL LETTER HHA                              |\n",
      "| U+105A5     | 𐖥      | 0xF0 0x90 0x96 0xA5 |      1 | VITHKUQI SMALL LETTER I                                |\n",
      "| U+105A6     | 𐖦      | 0xF0 0x90 0x96 0xA6 |      1 | VITHKUQI SMALL LETTER IJE                              |\n",
      "| U+105A7     | 𐖧      | 0xF0 0x90 0x96 0xA7 |      1 | VITHKUQI SMALL LETTER JE                               |\n",
      "| U+105A8     | 𐖨      | 0xF0 0x90 0x96 0xA8 |      1 | VITHKUQI SMALL LETTER KA                               |\n",
      "| U+105A9     | 𐖩      | 0xF0 0x90 0x96 0xA9 |      1 | VITHKUQI SMALL LETTER LA                               |\n",
      "| U+105AA     | 𐖪      | 0xF0 0x90 0x96 0xAA |      1 | VITHKUQI SMALL LETTER LLA                              |\n",
      "| U+105AB     | 𐖫      | 0xF0 0x90 0x96 0xAB |      1 | VITHKUQI SMALL LETTER ME                               |\n",
      "| U+105AC     | 𐖬      | 0xF0 0x90 0x96 0xAC |      1 | VITHKUQI SMALL LETTER NE                               |\n",
      "| U+105AD     | 𐖭      | 0xF0 0x90 0x96 0xAD |      1 | VITHKUQI SMALL LETTER NJE                              |\n",
      "| U+105AE     | 𐖮      | 0xF0 0x90 0x96 0xAE |      1 | VITHKUQI SMALL LETTER O                                |\n",
      "| U+105AF     | 𐖯      | 0xF0 0x90 0x96 0xAF |      1 | VITHKUQI SMALL LETTER PE                               |\n",
      "| U+105B0     | 𐖰      | 0xF0 0x90 0x96 0xB0 |      1 | VITHKUQI SMALL LETTER QA                               |\n",
      "| U+105B1     | 𐖱      | 0xF0 0x90 0x96 0xB1 |      1 | VITHKUQI SMALL LETTER RE                               |\n",
      "| U+105B3     | 𐖳      | 0xF0 0x90 0x96 0xB3 |      1 | VITHKUQI SMALL LETTER SE                               |\n",
      "| U+105B4     | 𐖴      | 0xF0 0x90 0x96 0xB4 |      1 | VITHKUQI SMALL LETTER SHE                              |\n",
      "| U+105B5     | 𐖵      | 0xF0 0x90 0x96 0xB5 |      1 | VITHKUQI SMALL LETTER TE                               |\n",
      "| U+105B6     | 𐖶      | 0xF0 0x90 0x96 0xB6 |      1 | VITHKUQI SMALL LETTER THE                              |\n",
      "| U+105B7     | 𐖷      | 0xF0 0x90 0x96 0xB7 |      1 | VITHKUQI SMALL LETTER U                                |\n",
      "| U+105B8     | 𐖸      | 0xF0 0x90 0x96 0xB8 |      1 | VITHKUQI SMALL LETTER VE                               |\n",
      "| U+105B9     | 𐖹      | 0xF0 0x90 0x96 0xB9 |      1 | VITHKUQI SMALL LETTER XE                               |\n",
      "| U+105BB     | 𐖻      | 0xF0 0x90 0x96 0xBB |      1 | VITHKUQI SMALL LETTER Y                                |\n",
      "| U+105BC     | 𐖼      | 0xF0 0x90 0x96 0xBC |      1 | VITHKUQI SMALL LETTER ZE                               |\n",
      "| U+10CC0     | 𐳀      | 0xF0 0x90 0xB3 0x80 |      1 | OLD HUNGARIAN SMALL LETTER A                           |\n",
      "| U+10CC1     | 𐳁      | 0xF0 0x90 0xB3 0x81 |      1 | OLD HUNGARIAN SMALL LETTER AA                          |\n",
      "| U+10CC2     | 𐳂      | 0xF0 0x90 0xB3 0x82 |      1 | OLD HUNGARIAN SMALL LETTER EB                          |\n",
      "| U+10CC3     | 𐳃      | 0xF0 0x90 0xB3 0x83 |      1 | OLD HUNGARIAN SMALL LETTER AMB                         |\n",
      "| U+10CC4     | 𐳄      | 0xF0 0x90 0xB3 0x84 |      1 | OLD HUNGARIAN SMALL LETTER EC                          |\n",
      "| U+10CC5     | 𐳅      | 0xF0 0x90 0xB3 0x85 |      1 | OLD HUNGARIAN SMALL LETTER ENC                         |\n",
      "| U+10CC6     | 𐳆      | 0xF0 0x90 0xB3 0x86 |      1 | OLD HUNGARIAN SMALL LETTER ECS                         |\n",
      "| U+10CC7     | 𐳇      | 0xF0 0x90 0xB3 0x87 |      1 | OLD HUNGARIAN SMALL LETTER ED                          |\n",
      "| U+10CC8     | 𐳈      | 0xF0 0x90 0xB3 0x88 |      1 | OLD HUNGARIAN SMALL LETTER AND                         |\n",
      "| U+10CC9     | 𐳉      | 0xF0 0x90 0xB3 0x89 |      1 | OLD HUNGARIAN SMALL LETTER E                           |\n",
      "| U+10CCA     | 𐳊      | 0xF0 0x90 0xB3 0x8A |      1 | OLD HUNGARIAN SMALL LETTER CLOSE E                     |\n",
      "| U+10CCB     | 𐳋      | 0xF0 0x90 0xB3 0x8B |      1 | OLD HUNGARIAN SMALL LETTER EE                          |\n",
      "| U+10CCC     | 𐳌      | 0xF0 0x90 0xB3 0x8C |      1 | OLD HUNGARIAN SMALL LETTER EF                          |\n",
      "| U+10CCD     | 𐳍      | 0xF0 0x90 0xB3 0x8D |      1 | OLD HUNGARIAN SMALL LETTER EG                          |\n",
      "| U+10CCE     | 𐳎      | 0xF0 0x90 0xB3 0x8E |      1 | OLD HUNGARIAN SMALL LETTER EGY                         |\n",
      "| U+10CCF     | 𐳏      | 0xF0 0x90 0xB3 0x8F |      1 | OLD HUNGARIAN SMALL LETTER EH                          |\n",
      "| U+10CD0     | 𐳐      | 0xF0 0x90 0xB3 0x90 |      1 | OLD HUNGARIAN SMALL LETTER I                           |\n",
      "| U+10CD1     | 𐳑      | 0xF0 0x90 0xB3 0x91 |      1 | OLD HUNGARIAN SMALL LETTER II                          |\n",
      "| U+10CD2     | 𐳒      | 0xF0 0x90 0xB3 0x92 |      1 | OLD HUNGARIAN SMALL LETTER EJ                          |\n",
      "| U+10CD3     | 𐳓      | 0xF0 0x90 0xB3 0x93 |      1 | OLD HUNGARIAN SMALL LETTER EK                          |\n",
      "| U+10CD4     | 𐳔      | 0xF0 0x90 0xB3 0x94 |      1 | OLD HUNGARIAN SMALL LETTER AK                          |\n",
      "| U+10CD5     | 𐳕      | 0xF0 0x90 0xB3 0x95 |      1 | OLD HUNGARIAN SMALL LETTER UNK                         |\n",
      "| U+10CD6     | 𐳖      | 0xF0 0x90 0xB3 0x96 |      1 | OLD HUNGARIAN SMALL LETTER EL                          |\n",
      "| U+10CD7     | 𐳗      | 0xF0 0x90 0xB3 0x97 |      1 | OLD HUNGARIAN SMALL LETTER ELY                         |\n",
      "| U+10CD8     | 𐳘      | 0xF0 0x90 0xB3 0x98 |      1 | OLD HUNGARIAN SMALL LETTER EM                          |\n",
      "| U+10CD9     | 𐳙      | 0xF0 0x90 0xB3 0x99 |      1 | OLD HUNGARIAN SMALL LETTER EN                          |\n",
      "| U+10CDA     | 𐳚      | 0xF0 0x90 0xB3 0x9A |      1 | OLD HUNGARIAN SMALL LETTER ENY                         |\n",
      "| U+10CDB     | 𐳛      | 0xF0 0x90 0xB3 0x9B |      1 | OLD HUNGARIAN SMALL LETTER O                           |\n",
      "| U+10CDC     | 𐳜      | 0xF0 0x90 0xB3 0x9C |      1 | OLD HUNGARIAN SMALL LETTER OO                          |\n",
      "| U+10CDD     | 𐳝      | 0xF0 0x90 0xB3 0x9D |      1 | OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE               |\n",
      "| U+10CDE     | 𐳞      | 0xF0 0x90 0xB3 0x9E |      1 | OLD HUNGARIAN SMALL LETTER RUDIMENTA OE                |\n",
      "| U+10CDF     | 𐳟      | 0xF0 0x90 0xB3 0x9F |      1 | OLD HUNGARIAN SMALL LETTER OEE                         |\n",
      "| U+10CE0     | 𐳠      | 0xF0 0x90 0xB3 0xA0 |      1 | OLD HUNGARIAN SMALL LETTER EP                          |\n",
      "| U+10CE1     | 𐳡      | 0xF0 0x90 0xB3 0xA1 |      1 | OLD HUNGARIAN SMALL LETTER EMP                         |\n",
      "| U+10CE2     | 𐳢      | 0xF0 0x90 0xB3 0xA2 |      1 | OLD HUNGARIAN SMALL LETTER ER                          |\n",
      "| U+10CE3     | 𐳣      | 0xF0 0x90 0xB3 0xA3 |      1 | OLD HUNGARIAN SMALL LETTER SHORT ER                    |\n",
      "| U+10CE4     | 𐳤      | 0xF0 0x90 0xB3 0xA4 |      1 | OLD HUNGARIAN SMALL LETTER ES                          |\n",
      "| U+10CE5     | 𐳥      | 0xF0 0x90 0xB3 0xA5 |      1 | OLD HUNGARIAN SMALL LETTER ESZ                         |\n",
      "| U+10CE6     | 𐳦      | 0xF0 0x90 0xB3 0xA6 |      1 | OLD HUNGARIAN SMALL LETTER ET                          |\n",
      "| U+10CE7     | 𐳧      | 0xF0 0x90 0xB3 0xA7 |      1 | OLD HUNGARIAN SMALL LETTER ENT                         |\n",
      "| U+10CE8     | 𐳨      | 0xF0 0x90 0xB3 0xA8 |      1 | OLD HUNGARIAN SMALL LETTER ETY                         |\n",
      "| U+10CE9     | 𐳩      | 0xF0 0x90 0xB3 0xA9 |      1 | OLD HUNGARIAN SMALL LETTER ECH                         |\n",
      "| U+10CEA     | 𐳪      | 0xF0 0x90 0xB3 0xAA |      1 | OLD HUNGARIAN SMALL LETTER U                           |\n",
      "| U+10CEB     | 𐳫      | 0xF0 0x90 0xB3 0xAB |      1 | OLD HUNGARIAN SMALL LETTER UU                          |\n",
      "| U+10CEC     | 𐳬      | 0xF0 0x90 0xB3 0xAC |      1 | OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE               |\n",
      "| U+10CED     | 𐳭      | 0xF0 0x90 0xB3 0xAD |      1 | OLD HUNGARIAN SMALL LETTER RUDIMENTA UE                |\n",
      "| U+10CEE     | 𐳮      | 0xF0 0x90 0xB3 0xAE |      1 | OLD HUNGARIAN SMALL LETTER EV                          |\n",
      "| U+10CEF     | 𐳯      | 0xF0 0x90 0xB3 0xAF |      1 | OLD HUNGARIAN SMALL LETTER EZ                          |\n",
      "| U+10CF0     | 𐳰      | 0xF0 0x90 0xB3 0xB0 |      1 | OLD HUNGARIAN SMALL LETTER EZS                         |\n",
      "| U+10CF1     | 𐳱      | 0xF0 0x90 0xB3 0xB1 |      1 | OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN             |\n",
      "| U+10CF2     | 𐳲      | 0xF0 0x90 0xB3 0xB2 |      1 | OLD HUNGARIAN SMALL LETTER US                          |\n",
      "| U+10D70     | 𐵰      | 0xF0 0x90 0xB5 0xB0 |      1 |                                                        |\n",
      "| U+10D71     | 𐵱      | 0xF0 0x90 0xB5 0xB1 |      1 |                                                        |\n",
      "| U+10D72     | 𐵲      | 0xF0 0x90 0xB5 0xB2 |      1 |                                                        |\n",
      "| U+10D73     | 𐵳      | 0xF0 0x90 0xB5 0xB3 |      1 |                                                        |\n",
      "| U+10D74     | 𐵴      | 0xF0 0x90 0xB5 0xB4 |      1 |                                                        |\n",
      "| U+10D75     | 𐵵      | 0xF0 0x90 0xB5 0xB5 |      1 |                                                        |\n",
      "| U+10D76     | 𐵶      | 0xF0 0x90 0xB5 0xB6 |      1 |                                                        |\n",
      "| U+10D77     | 𐵷      | 0xF0 0x90 0xB5 0xB7 |      1 |                                                        |\n",
      "| U+10D78     | 𐵸      | 0xF0 0x90 0xB5 0xB8 |      1 |                                                        |\n",
      "| U+10D79     | 𐵹      | 0xF0 0x90 0xB5 0xB9 |      1 |                                                        |\n",
      "| U+10D7A     | 𐵺      | 0xF0 0x90 0xB5 0xBA |      1 |                                                        |\n",
      "| U+10D7B     | 𐵻      | 0xF0 0x90 0xB5 0xBB |      1 |                                                        |\n",
      "| U+10D7C     | 𐵼      | 0xF0 0x90 0xB5 0xBC |      1 |                                                        |\n",
      "| U+10D7D     | 𐵽      | 0xF0 0x90 0xB5 0xBD |      1 |                                                        |\n",
      "| U+10D7E     | 𐵾      | 0xF0 0x90 0xB5 0xBE |      1 |                                                        |\n",
      "| U+10D7F     | 𐵿      | 0xF0 0x90 0xB5 0xBF |      1 |                                                        |\n",
      "| U+10D80     | 𐶀      | 0xF0 0x90 0xB6 0x80 |      1 |                                                        |\n",
      "| U+10D81     | 𐶁      | 0xF0 0x90 0xB6 0x81 |      1 |                                                        |\n",
      "| U+10D82     | 𐶂      | 0xF0 0x90 0xB6 0x82 |      1 |                                                        |\n",
      "| U+10D83     | 𐶃      | 0xF0 0x90 0xB6 0x83 |      1 |                                                        |\n",
      "| U+10D84     | 𐶄      | 0xF0 0x90 0xB6 0x84 |      1 |                                                        |\n",
      "| U+10D85     | 𐶅      | 0xF0 0x90 0xB6 0x85 |      1 |                                                        |\n",
      "| U+118C0     | 𑣀      | 0xF0 0x91 0xA3 0x80 |      1 | WARANG CITI SMALL LETTER NGAA                          |\n",
      "| U+118C1     | 𑣁      | 0xF0 0x91 0xA3 0x81 |      1 | WARANG CITI SMALL LETTER A                             |\n",
      "| U+118C2     | 𑣂      | 0xF0 0x91 0xA3 0x82 |      1 | WARANG CITI SMALL LETTER WI                            |\n",
      "| U+118C3     | 𑣃      | 0xF0 0x91 0xA3 0x83 |      1 | WARANG CITI SMALL LETTER YU                            |\n",
      "| U+118C4     | 𑣄      | 0xF0 0x91 0xA3 0x84 |      1 | WARANG CITI SMALL LETTER YA                            |\n",
      "| U+118C5     | 𑣅      | 0xF0 0x91 0xA3 0x85 |      1 | WARANG CITI SMALL LETTER YO                            |\n",
      "| U+118C6     | 𑣆      | 0xF0 0x91 0xA3 0x86 |      1 | WARANG CITI SMALL LETTER II                            |\n",
      "| U+118C7     | 𑣇      | 0xF0 0x91 0xA3 0x87 |      1 | WARANG CITI SMALL LETTER UU                            |\n",
      "| U+118C8     | 𑣈      | 0xF0 0x91 0xA3 0x88 |      1 | WARANG CITI SMALL LETTER E                             |\n",
      "| U+118C9     | 𑣉      | 0xF0 0x91 0xA3 0x89 |      1 | WARANG CITI SMALL LETTER O                             |\n",
      "| U+118CA     | 𑣊      | 0xF0 0x91 0xA3 0x8A |      1 | WARANG CITI SMALL LETTER ANG                           |\n",
      "| U+118CB     | 𑣋      | 0xF0 0x91 0xA3 0x8B |      1 | WARANG CITI SMALL LETTER GA                            |\n",
      "| U+118CC     | 𑣌      | 0xF0 0x91 0xA3 0x8C |      1 | WARANG CITI SMALL LETTER KO                            |\n",
      "| U+118CD     | 𑣍      | 0xF0 0x91 0xA3 0x8D |      1 | WARANG CITI SMALL LETTER ENY                           |\n",
      "| U+118CE     | 𑣎      | 0xF0 0x91 0xA3 0x8E |      1 | WARANG CITI SMALL LETTER YUJ                           |\n",
      "| U+118CF     | 𑣏      | 0xF0 0x91 0xA3 0x8F |      1 | WARANG CITI SMALL LETTER UC                            |\n",
      "| U+118D0     | 𑣐      | 0xF0 0x91 0xA3 0x90 |      1 | WARANG CITI SMALL LETTER ENN                           |\n",
      "| U+118D1     | 𑣑      | 0xF0 0x91 0xA3 0x91 |      1 | WARANG CITI SMALL LETTER ODD                           |\n",
      "| U+118D2     | 𑣒      | 0xF0 0x91 0xA3 0x92 |      1 | WARANG CITI SMALL LETTER TTE                           |\n",
      "| U+118D3     | 𑣓      | 0xF0 0x91 0xA3 0x93 |      1 | WARANG CITI SMALL LETTER NUNG                          |\n",
      "| U+118D4     | 𑣔      | 0xF0 0x91 0xA3 0x94 |      1 | WARANG CITI SMALL LETTER DA                            |\n",
      "| U+118D5     | 𑣕      | 0xF0 0x91 0xA3 0x95 |      1 | WARANG CITI SMALL LETTER AT                            |\n",
      "| U+118D6     | 𑣖      | 0xF0 0x91 0xA3 0x96 |      1 | WARANG CITI SMALL LETTER AM                            |\n",
      "| U+118D7     | 𑣗      | 0xF0 0x91 0xA3 0x97 |      1 | WARANG CITI SMALL LETTER BU                            |\n",
      "| U+118D8     | 𑣘      | 0xF0 0x91 0xA3 0x98 |      1 | WARANG CITI SMALL LETTER PU                            |\n",
      "| U+118D9     | 𑣙      | 0xF0 0x91 0xA3 0x99 |      1 | WARANG CITI SMALL LETTER HIYO                          |\n",
      "| U+118DA     | 𑣚      | 0xF0 0x91 0xA3 0x9A |      1 | WARANG CITI SMALL LETTER HOLO                          |\n",
      "| U+118DB     | 𑣛      | 0xF0 0x91 0xA3 0x9B |      1 | WARANG CITI SMALL LETTER HORR                          |\n",
      "| U+118DC     | 𑣜      | 0xF0 0x91 0xA3 0x9C |      1 | WARANG CITI SMALL LETTER HAR                           |\n",
      "| U+118DD     | 𑣝      | 0xF0 0x91 0xA3 0x9D |      1 | WARANG CITI SMALL LETTER SSUU                          |\n",
      "| U+118DE     | 𑣞      | 0xF0 0x91 0xA3 0x9E |      1 | WARANG CITI SMALL LETTER SII                           |\n",
      "| U+118DF     | 𑣟      | 0xF0 0x91 0xA3 0x9F |      1 | WARANG CITI SMALL LETTER VIYO                          |\n",
      "| U+16E60     | 𖹠      | 0xF0 0x96 0xB9 0xA0 |      1 | MEDEFAIDRIN SMALL LETTER M                             |\n",
      "| U+16E61     | 𖹡      | 0xF0 0x96 0xB9 0xA1 |      1 | MEDEFAIDRIN SMALL LETTER S                             |\n",
      "| U+16E62     | 𖹢      | 0xF0 0x96 0xB9 0xA2 |      1 | MEDEFAIDRIN SMALL LETTER V                             |\n",
      "| U+16E63     | 𖹣      | 0xF0 0x96 0xB9 0xA3 |      1 | MEDEFAIDRIN SMALL LETTER W                             |\n",
      "| U+16E64     | 𖹤      | 0xF0 0x96 0xB9 0xA4 |      1 | MEDEFAIDRIN SMALL LETTER ATIU                          |\n",
      "| U+16E65     | 𖹥      | 0xF0 0x96 0xB9 0xA5 |      1 | MEDEFAIDRIN SMALL LETTER Z                             |\n",
      "| U+16E66     | 𖹦      | 0xF0 0x96 0xB9 0xA6 |      1 | MEDEFAIDRIN SMALL LETTER KP                            |\n",
      "| U+16E67     | 𖹧      | 0xF0 0x96 0xB9 0xA7 |      1 | MEDEFAIDRIN SMALL LETTER P                             |\n",
      "| U+16E68     | 𖹨      | 0xF0 0x96 0xB9 0xA8 |      1 | MEDEFAIDRIN SMALL LETTER T                             |\n",
      "| U+16E69     | 𖹩      | 0xF0 0x96 0xB9 0xA9 |      1 | MEDEFAIDRIN SMALL LETTER G                             |\n",
      "| U+16E6A     | 𖹪      | 0xF0 0x96 0xB9 0xAA |      1 | MEDEFAIDRIN SMALL LETTER F                             |\n",
      "| U+16E6B     | 𖹫      | 0xF0 0x96 0xB9 0xAB |      1 | MEDEFAIDRIN SMALL LETTER I                             |\n",
      "| U+16E6C     | 𖹬      | 0xF0 0x96 0xB9 0xAC |      1 | MEDEFAIDRIN SMALL LETTER K                             |\n",
      "| U+16E6D     | 𖹭      | 0xF0 0x96 0xB9 0xAD |      1 | MEDEFAIDRIN SMALL LETTER A                             |\n",
      "| U+16E6E     | 𖹮      | 0xF0 0x96 0xB9 0xAE |      1 | MEDEFAIDRIN SMALL LETTER J                             |\n",
      "| U+16E6F     | 𖹯      | 0xF0 0x96 0xB9 0xAF |      1 | MEDEFAIDRIN SMALL LETTER E                             |\n",
      "| U+16E70     | 𖹰      | 0xF0 0x96 0xB9 0xB0 |      1 | MEDEFAIDRIN SMALL LETTER B                             |\n",
      "| U+16E71     | 𖹱      | 0xF0 0x96 0xB9 0xB1 |      1 | MEDEFAIDRIN SMALL LETTER C                             |\n",
      "| U+16E72     | 𖹲      | 0xF0 0x96 0xB9 0xB2 |      1 | MEDEFAIDRIN SMALL LETTER U                             |\n",
      "| U+16E73     | 𖹳      | 0xF0 0x96 0xB9 0xB3 |      1 | MEDEFAIDRIN SMALL LETTER YU                            |\n",
      "| U+16E74     | 𖹴      | 0xF0 0x96 0xB9 0xB4 |      1 | MEDEFAIDRIN SMALL LETTER L                             |\n",
      "| U+16E75     | 𖹵      | 0xF0 0x96 0xB9 0xB5 |      1 | MEDEFAIDRIN SMALL LETTER Q                             |\n",
      "| U+16E76     | 𖹶      | 0xF0 0x96 0xB9 0xB6 |      1 | MEDEFAIDRIN SMALL LETTER HP                            |\n",
      "| U+16E77     | 𖹷      | 0xF0 0x96 0xB9 0xB7 |      1 | MEDEFAIDRIN SMALL LETTER NY                            |\n",
      "| U+16E78     | 𖹸      | 0xF0 0x96 0xB9 0xB8 |      1 | MEDEFAIDRIN SMALL LETTER X                             |\n",
      "| U+16E79     | 𖹹      | 0xF0 0x96 0xB9 0xB9 |      1 | MEDEFAIDRIN SMALL LETTER D                             |\n",
      "| U+16E7A     | 𖹺      | 0xF0 0x96 0xB9 0xBA |      1 | MEDEFAIDRIN SMALL LETTER OE                            |\n",
      "| U+16E7B     | 𖹻      | 0xF0 0x96 0xB9 0xBB |      1 | MEDEFAIDRIN SMALL LETTER N                             |\n",
      "| U+16E7C     | 𖹼      | 0xF0 0x96 0xB9 0xBC |      1 | MEDEFAIDRIN SMALL LETTER R                             |\n",
      "| U+16E7D     | 𖹽      | 0xF0 0x96 0xB9 0xBD |      1 | MEDEFAIDRIN SMALL LETTER O                             |\n",
      "| U+16E7E     | 𖹾      | 0xF0 0x96 0xB9 0xBE |      1 | MEDEFAIDRIN SMALL LETTER AI                            |\n",
      "| U+16E7F     | 𖹿      | 0xF0 0x96 0xB9 0xBF |      1 | MEDEFAIDRIN SMALL LETTER Y                             |\n",
      "| U+16EBB     | 𖺻      | 0xF0 0x96 0xBA 0xBB |      1 |                                                        |\n",
      "| U+16EBC     | 𖺼      | 0xF0 0x96 0xBA 0xBC |      1 |                                                        |\n",
      "| U+16EBD     | 𖺽      | 0xF0 0x96 0xBA 0xBD |      1 |                                                        |\n",
      "| U+16EBE     | 𖺾      | 0xF0 0x96 0xBA 0xBE |      1 |                                                        |\n",
      "| U+16EBF     | 𖺿      | 0xF0 0x96 0xBA 0xBF |      1 |                                                        |\n",
      "| U+16EC0     | 𖻀      | 0xF0 0x96 0xBB 0x80 |      1 |                                                        |\n",
      "| U+16EC1     | 𖻁      | 0xF0 0x96 0xBB 0x81 |      1 |                                                        |\n",
      "| U+16EC2     | 𖻂      | 0xF0 0x96 0xBB 0x82 |      1 |                                                        |\n",
      "| U+16EC3     | 𖻃      | 0xF0 0x96 0xBB 0x83 |      1 |                                                        |\n",
      "| U+16EC4     | 𖻄      | 0xF0 0x96 0xBB 0x84 |      1 |                                                        |\n",
      "| U+16EC5     | 𖻅      | 0xF0 0x96 0xBB 0x85 |      1 |                                                        |\n",
      "| U+16EC6     | 𖻆      | 0xF0 0x96 0xBB 0x86 |      1 |                                                        |\n",
      "| U+16EC7     | 𖻇      | 0xF0 0x96 0xBB 0x87 |      1 |                                                        |\n",
      "| U+16EC8     | 𖻈      | 0xF0 0x96 0xBB 0x88 |      1 |                                                        |\n",
      "| U+16EC9     | 𖻉      | 0xF0 0x96 0xBB 0x89 |      1 |                                                        |\n",
      "| U+16ECA     | 𖻊      | 0xF0 0x96 0xBB 0x8A |      1 |                                                        |\n",
      "| U+16ECB     | 𖻋      | 0xF0 0x96 0xBB 0x8B |      1 |                                                        |\n",
      "| U+16ECC     | 𖻌      | 0xF0 0x96 0xBB 0x8C |      1 |                                                        |\n",
      "| U+16ECD     | 𖻍      | 0xF0 0x96 0xBB 0x8D |      1 |                                                        |\n",
      "| U+16ECE     | 𖻎      | 0xF0 0x96 0xBB 0x8E |      1 |                                                        |\n",
      "| U+16ECF     | 𖻏      | 0xF0 0x96 0xBB 0x8F |      1 |                                                        |\n",
      "| U+16ED0     | 𖻐      | 0xF0 0x96 0xBB 0x90 |      1 |                                                        |\n",
      "| U+16ED1     | 𖻑      | 0xF0 0x96 0xBB 0x91 |      1 |                                                        |\n",
      "| U+16ED2     | 𖻒      | 0xF0 0x96 0xBB 0x92 |      1 |                                                        |\n",
      "| U+16ED3     | 𖻓      | 0xF0 0x96 0xBB 0x93 |      1 |                                                        |\n",
      "| U+1E922     | 𞤢      | 0xF0 0x9E 0xA4 0xA2 |      1 | ADLAM SMALL LETTER ALIF                                |\n",
      "| U+1E923     | 𞤣      | 0xF0 0x9E 0xA4 0xA3 |      1 | ADLAM SMALL LETTER DAALI                               |\n",
      "| U+1E924     | 𞤤      | 0xF0 0x9E 0xA4 0xA4 |      1 | ADLAM SMALL LETTER LAAM                                |\n",
      "| U+1E925     | 𞤥      | 0xF0 0x9E 0xA4 0xA5 |      1 | ADLAM SMALL LETTER MIIM                                |\n",
      "| U+1E926     | 𞤦      | 0xF0 0x9E 0xA4 0xA6 |      1 | ADLAM SMALL LETTER BA                                  |\n",
      "| U+1E927     | 𞤧      | 0xF0 0x9E 0xA4 0xA7 |      1 | ADLAM SMALL LETTER SINNYIIYHE                          |\n",
      "| U+1E928     | 𞤨      | 0xF0 0x9E 0xA4 0xA8 |      1 | ADLAM SMALL LETTER PE                                  |\n",
      "| U+1E929     | 𞤩      | 0xF0 0x9E 0xA4 0xA9 |      1 | ADLAM SMALL LETTER BHE                                 |\n",
      "| U+1E92A     | 𞤪      | 0xF0 0x9E 0xA4 0xAA |      1 | ADLAM SMALL LETTER RA                                  |\n",
      "| U+1E92B     | 𞤫      | 0xF0 0x9E 0xA4 0xAB |      1 | ADLAM SMALL LETTER E                                   |\n",
      "| U+1E92C     | 𞤬      | 0xF0 0x9E 0xA4 0xAC |      1 | ADLAM SMALL LETTER FA                                  |\n",
      "| U+1E92D     | 𞤭      | 0xF0 0x9E 0xA4 0xAD |      1 | ADLAM SMALL LETTER I                                   |\n",
      "| U+1E92E     | 𞤮      | 0xF0 0x9E 0xA4 0xAE |      1 | ADLAM SMALL LETTER O                                   |\n",
      "| U+1E92F     | 𞤯      | 0xF0 0x9E 0xA4 0xAF |      1 | ADLAM SMALL LETTER DHA                                 |\n",
      "| U+1E930     | 𞤰      | 0xF0 0x9E 0xA4 0xB0 |      1 | ADLAM SMALL LETTER YHE                                 |\n",
      "| U+1E931     | 𞤱      | 0xF0 0x9E 0xA4 0xB1 |      1 | ADLAM SMALL LETTER WAW                                 |\n",
      "| U+1E932     | 𞤲      | 0xF0 0x9E 0xA4 0xB2 |      1 | ADLAM SMALL LETTER NUN                                 |\n",
      "| U+1E933     | 𞤳      | 0xF0 0x9E 0xA4 0xB3 |      1 | ADLAM SMALL LETTER KAF                                 |\n",
      "| U+1E934     | 𞤴      | 0xF0 0x9E 0xA4 0xB4 |      1 | ADLAM SMALL LETTER YA                                  |\n",
      "| U+1E935     | 𞤵      | 0xF0 0x9E 0xA4 0xB5 |      1 | ADLAM SMALL LETTER U                                   |\n",
      "| U+1E936     | 𞤶      | 0xF0 0x9E 0xA4 0xB6 |      1 | ADLAM SMALL LETTER JIIM                                |\n",
      "| U+1E937     | 𞤷      | 0xF0 0x9E 0xA4 0xB7 |      1 | ADLAM SMALL LETTER CHI                                 |\n",
      "| U+1E938     | 𞤸      | 0xF0 0x9E 0xA4 0xB8 |      1 | ADLAM SMALL LETTER HA                                  |\n",
      "| U+1E939     | 𞤹      | 0xF0 0x9E 0xA4 0xB9 |      1 | ADLAM SMALL LETTER QAAF                                |\n",
      "| U+1E93A     | 𞤺      | 0xF0 0x9E 0xA4 0xBA |      1 | ADLAM SMALL LETTER GA                                  |\n",
      "| U+1E93B     | 𞤻      | 0xF0 0x9E 0xA4 0xBB |      1 | ADLAM SMALL LETTER NYA                                 |\n",
      "| U+1E93C     | 𞤼      | 0xF0 0x9E 0xA4 0xBC |      1 | ADLAM SMALL LETTER TU                                  |\n",
      "| U+1E93D     | 𞤽      | 0xF0 0x9E 0xA4 0xBD |      1 | ADLAM SMALL LETTER NHA                                 |\n",
      "| U+1E93E     | 𞤾      | 0xF0 0x9E 0xA4 0xBE |      1 | ADLAM SMALL LETTER VA                                  |\n",
      "| U+1E93F     | 𞤿      | 0xF0 0x9E 0xA4 0xBF |      1 | ADLAM SMALL LETTER KHA                                 |\n",
      "| U+1E940     | 𞥀      | 0xF0 0x9E 0xA5 0x80 |      1 | ADLAM SMALL LETTER GBE                                 |\n",
      "| U+1E941     | 𞥁      | 0xF0 0x9E 0xA5 0x81 |      1 | ADLAM SMALL LETTER ZAL                                 |\n",
      "| U+1E942     | 𞥂      | 0xF0 0x9E 0xA5 0x82 |      1 | ADLAM SMALL LETTER KPO                                 |\n",
      "| U+1E943     | 𞥃      | 0xF0 0x9E 0xA5 0x83 |      1 | ADLAM SMALL LETTER SHA                                 |\n"
     ]
    }
   ],
   "source": [
    "rows = []\n",
    "for codepoint, frequency in target_frequency.most_common():\n",
    "    try:\n",
    "        character = chr(codepoint)\n",
    "        name = unicodedata.name(character, \"\")\n",
    "        hex_bytes = utf8_hex(character)\n",
    "    except (ValueError, OverflowError):\n",
    "        character = \"?\"\n",
    "        name = \"\"\n",
    "        hex_bytes = \"?\"\n",
    "    rows.append(\n",
    "        {\n",
    "            \"Codepoint\": f\"U+{codepoint:04X}\",\n",
    "            \"Char\": character,\n",
    "            \"UTF-8\": hex_bytes,\n",
    "            \"Freq\": frequency,\n",
    "            \"Name\": name,\n",
    "        }\n",
    "    )\n",
    "\n",
    "print(tabulate(rows, headers=\"keys\", tablefmt=\"github\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This suggests that the \"GREEK SMALL LETTER IOTA\" (U+03B9) is the most common folding target, being the folded form of 71 different codepoints.\n",
    "The reason for this is historical.\n",
    "Ancient Greek had a grammatical feature called the \"iota subscript\" where iota was written as a small subscript beneath vowels (α, η, ω) to indicate certain grammatical forms (dative case, etc.).\n",
    "When case-folding, these decompose and the subscript iota becomes a regular lowercase iota:\n",
    "\n",
    "- ᾳ (alpha with ypogegrammeni) → αι\n",
    "- ῃ (eta with ypogegrammeni) → ηι\n",
    "- ῳ (omega with ypogegrammeni) → ωι\n",
    "\n",
    "More importantly, at this point we see that `'f'`, `'s'`, `'i'`, `'t'` are the most common direct single-byte UTF-8 folding targets.\n",
    "Each is the target of at least 4 different codepoints.\n",
    "But that doesn't tell the whole story!\n",
    "\n",
    "### Otherwise Ambiguous Folding Targets\n",
    "\n",
    "Oftentimes, a character is only one of many characters in the produced folding result.\n",
    "\n",
    "- `'ﬀ'` → `\"ff\"` - 3-byte codepoint mapping into 2x 1-byte codepoints\n",
    "- `'ﬁ'` → `\"fi\"` - 3-byte codepoint mapping into 2x 1-byte codepoints\n",
    "- `'ﬂ'` → `\"fl\"` - 3-byte codepoint mapping into 2x 1-byte codepoints\n",
    "- `'ﬃ'` → `\"ffi\"` - 3-byte codepoint mapping into 3x 1-byte codepoints\n",
    "- `'ﬄ'` → `\"ffl\"` - 3-byte codepoint mapping into 3x 1-byte codepoints\n",
    "\n",
    "Let's account for those as well:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total folding rules: 1,585\n",
      "  - Direct 1:1 foldings: 1,481\n",
      "  - Multi-codepoint expansions: 104\n",
      "\n",
      "Unique target codepoints:\n",
      "  - Only direct targets: 1,398\n",
      "  - Only partial targets: 48\n",
      "  - Both direct AND partial: 54\n"
     ]
    }
   ],
   "source": [
    "direct_target_frequency = Counter()  # Codepoint is the ONLY target of a folding\n",
    "partial_target_frequency = Counter()  # Codepoint is ONE OF multiple targets in a folding\n",
    "\n",
    "for source_codepoint, target_codepoints in case_folds.items():\n",
    "    if len(target_codepoints) == 1:\n",
    "        # Direct 1:1 folding (e.g., 'A' → 'a')\n",
    "        direct_target_frequency[target_codepoints[0]] += 1\n",
    "    else:\n",
    "        # Multi-codepoint expansion (e.g., 'ﬁ' → 'f', 'i')\n",
    "        for target_codepoint in target_codepoints:\n",
    "            partial_target_frequency[target_codepoint] += 1\n",
    "\n",
    "# Some codepoints may be both direct AND partial targets\n",
    "both_targets = set(direct_target_frequency.keys()) & set(partial_target_frequency.keys())\n",
    "\n",
    "print(f\"Total folding rules: {len(case_folds):,}\")\n",
    "print(f\"  - Direct 1:1 foldings: {sum(1 for t in case_folds.values() if len(t) == 1):,}\")\n",
    "print(f\"  - Multi-codepoint expansions: {sum(1 for t in case_folds.values() if len(t) > 1):,}\")\n",
    "print()\n",
    "print(f\"Unique target codepoints:\")\n",
    "print(f\"  - Only direct targets: {len(direct_target_frequency - partial_target_frequency):,}\")\n",
    "print(f\"  - Only partial targets: {len(partial_target_frequency - direct_target_frequency):,}\")\n",
    "print(f\"  - Both direct AND partial: {len(both_targets):,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table differentiates complete and partial folding targets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Codepoint   | Char   | UTF-8          |   Partial |   Direct | Example    | Example Hex                                    |\n",
      "|-------------|--------|----------------|-----------|----------|------------|------------------------------------------------|\n",
      "| U+03B9      | ι      | 0xCE 0xB9      |        68 |        3 | 'ΐ' → \"ΐ\"  | 0xCE 0x90 → 0xCE 0xB9 0xCC 0x88 0xCC 0x81      |\n",
      "| U+0342      | ͂       | 0xCD 0x82      |        11 |        0 | 'ὖ' → \"ὖ\"  | 0xE1 0xBD 0x96 → 0xCF 0x85 0xCC 0x93 0xCD 0x82 |\n",
      "| U+0308      | ̈       | 0xCC 0x88      |         9 |        0 | 'ΐ' → \"ΐ\"  | 0xCE 0x90 → 0xCE 0xB9 0xCC 0x88 0xCC 0x81      |\n",
      "| U+03C5      | υ      | 0xCF 0x85      |         9 |        1 | 'ΰ' → \"ΰ\"  | 0xCE 0xB0 → 0xCF 0x85 0xCC 0x88 0xCC 0x81      |\n",
      "| U+0066      | f      | 0x66           |         8 |        1 | 'ﬀ' → \"ff\" | 0xEF 0xAC 0x80 → 0x66 0x66                     |\n",
      "| U+0073      | s      | 0x73           |         6 |        2 | 'ß' → \"ss\" | 0xC3 0x9F → 0x73 0x73                          |\n",
      "| U+0301      | ́       | 0xCC 0x81      |         5 |        0 | 'ΐ' → \"ΐ\"  | 0xCE 0x90 → 0xCE 0xB9 0xCC 0x88 0xCC 0x81      |\n",
      "| U+0313      | ̓       | 0xCC 0x93      |         5 |        0 | 'ὐ' → \"ὐ\"  | 0xE1 0xBD 0x90 → 0xCF 0x85 0xCC 0x93           |\n",
      "| U+03B1      | α      | 0xCE 0xB1      |         4 |        1 | 'ᾳ' → \"αι\" | 0xE1 0xBE 0xB3 → 0xCE 0xB1 0xCE 0xB9           |\n",
      "| U+03B7      | η      | 0xCE 0xB7      |         4 |        1 | 'ῃ' → \"ηι\" | 0xE1 0xBF 0x83 → 0xCE 0xB7 0xCE 0xB9           |\n",
      "| U+03C9      | ω      | 0xCF 0x89      |         4 |        2 | 'ῳ' → \"ωι\" | 0xE1 0xBF 0xB3 → 0xCF 0x89 0xCE 0xB9           |\n",
      "| U+0574      | մ      | 0xD5 0xB4      |         4 |        1 | 'ﬓ' → \"մն\" | 0xEF 0xAC 0x93 → 0xD5 0xB4 0xD5 0xB6           |\n",
      "| U+0069      | i      | 0x69           |         3 |        1 | 'İ' → \"i̇\"  | 0xC4 0xB0 → 0x69 0xCC 0x87                     |\n",
      "| U+0074      | t      | 0x74           |         3 |        1 | 'ẗ' → \"ẗ\"  | 0xE1 0xBA 0x97 → 0x74 0xCC 0x88                |\n",
      "| U+0300      | ̀       | 0xCC 0x80      |         3 |        0 | 'ὒ' → \"ὒ\"  | 0xE1 0xBD 0x92 → 0xCF 0x85 0xCC 0x93 0xCC 0x80 |\n",
      "| U+0565      | ե      | 0xD5 0xA5      |         2 |        1 | 'և' → \"եւ\" | 0xD6 0x87 → 0xD5 0xA5 0xD6 0x82                |\n",
      "| U+030A      | ̊       | 0xCC 0x8A      |         2 |        0 | 'ẘ' → \"ẘ\"  | 0xE1 0xBA 0x98 → 0x77 0xCC 0x8A                |\n",
      "| U+1F00      | ἀ      | 0xE1 0xBC 0x80 |         2 |        1 | 'ᾀ' → \"ἀι\" | 0xE1 0xBE 0x80 → 0xE1 0xBC 0x80 0xCE 0xB9      |\n",
      "| U+1F01      | ἁ      | 0xE1 0xBC 0x81 |         2 |        1 | 'ᾁ' → \"ἁι\" | 0xE1 0xBE 0x81 → 0xE1 0xBC 0x81 0xCE 0xB9      |\n",
      "| U+1F02      | ἂ      | 0xE1 0xBC 0x82 |         2 |        1 | 'ᾂ' → \"ἂι\" | 0xE1 0xBE 0x82 → 0xE1 0xBC 0x82 0xCE 0xB9      |\n",
      "| U+1F03      | ἃ      | 0xE1 0xBC 0x83 |         2 |        1 | 'ᾃ' → \"ἃι\" | 0xE1 0xBE 0x83 → 0xE1 0xBC 0x83 0xCE 0xB9      |\n",
      "| U+1F04      | ἄ      | 0xE1 0xBC 0x84 |         2 |        1 | 'ᾄ' → \"ἄι\" | 0xE1 0xBE 0x84 → 0xE1 0xBC 0x84 0xCE 0xB9      |\n",
      "| U+1F05      | ἅ      | 0xE1 0xBC 0x85 |         2 |        1 | 'ᾅ' → \"ἅι\" | 0xE1 0xBE 0x85 → 0xE1 0xBC 0x85 0xCE 0xB9      |\n",
      "| U+1F06      | ἆ      | 0xE1 0xBC 0x86 |         2 |        1 | 'ᾆ' → \"ἆι\" | 0xE1 0xBE 0x86 → 0xE1 0xBC 0x86 0xCE 0xB9      |\n",
      "| U+1F07      | ἇ      | 0xE1 0xBC 0x87 |         2 |        1 | 'ᾇ' → \"ἇι\" | 0xE1 0xBE 0x87 → 0xE1 0xBC 0x87 0xCE 0xB9      |\n",
      "| U+1F20      | ἠ      | 0xE1 0xBC 0xA0 |         2 |        1 | 'ᾐ' → \"ἠι\" | 0xE1 0xBE 0x90 → 0xE1 0xBC 0xA0 0xCE 0xB9      |\n",
      "| U+1F21      | ἡ      | 0xE1 0xBC 0xA1 |         2 |        1 | 'ᾑ' → \"ἡι\" | 0xE1 0xBE 0x91 → 0xE1 0xBC 0xA1 0xCE 0xB9      |\n",
      "| U+1F22      | ἢ      | 0xE1 0xBC 0xA2 |         2 |        1 | 'ᾒ' → \"ἢι\" | 0xE1 0xBE 0x92 → 0xE1 0xBC 0xA2 0xCE 0xB9      |\n",
      "| U+1F23      | ἣ      | 0xE1 0xBC 0xA3 |         2 |        1 | 'ᾓ' → \"ἣι\" | 0xE1 0xBE 0x93 → 0xE1 0xBC 0xA3 0xCE 0xB9      |\n",
      "| U+1F24      | ἤ      | 0xE1 0xBC 0xA4 |         2 |        1 | 'ᾔ' → \"ἤι\" | 0xE1 0xBE 0x94 → 0xE1 0xBC 0xA4 0xCE 0xB9      |\n",
      "| U+1F25      | ἥ      | 0xE1 0xBC 0xA5 |         2 |        1 | 'ᾕ' → \"ἥι\" | 0xE1 0xBE 0x95 → 0xE1 0xBC 0xA5 0xCE 0xB9      |\n",
      "| U+1F26      | ἦ      | 0xE1 0xBC 0xA6 |         2 |        1 | 'ᾖ' → \"ἦι\" | 0xE1 0xBE 0x96 → 0xE1 0xBC 0xA6 0xCE 0xB9      |\n",
      "| U+1F27      | ἧ      | 0xE1 0xBC 0xA7 |         2 |        1 | 'ᾗ' → \"ἧι\" | 0xE1 0xBE 0x97 → 0xE1 0xBC 0xA7 0xCE 0xB9      |\n",
      "| U+1F60      | ὠ      | 0xE1 0xBD 0xA0 |         2 |        1 | 'ᾠ' → \"ὠι\" | 0xE1 0xBE 0xA0 → 0xE1 0xBD 0xA0 0xCE 0xB9      |\n",
      "| U+1F61      | ὡ      | 0xE1 0xBD 0xA1 |         2 |        1 | 'ᾡ' → \"ὡι\" | 0xE1 0xBE 0xA1 → 0xE1 0xBD 0xA1 0xCE 0xB9      |\n",
      "| U+1F62      | ὢ      | 0xE1 0xBD 0xA2 |         2 |        1 | 'ᾢ' → \"ὢι\" | 0xE1 0xBE 0xA2 → 0xE1 0xBD 0xA2 0xCE 0xB9      |\n",
      "| U+1F63      | ὣ      | 0xE1 0xBD 0xA3 |         2 |        1 | 'ᾣ' → \"ὣι\" | 0xE1 0xBE 0xA3 → 0xE1 0xBD 0xA3 0xCE 0xB9      |\n",
      "| U+1F64      | ὤ      | 0xE1 0xBD 0xA4 |         2 |        1 | 'ᾤ' → \"ὤι\" | 0xE1 0xBE 0xA4 → 0xE1 0xBD 0xA4 0xCE 0xB9      |\n",
      "| U+1F65      | ὥ      | 0xE1 0xBD 0xA5 |         2 |        1 | 'ᾥ' → \"ὥι\" | 0xE1 0xBE 0xA5 → 0xE1 0xBD 0xA5 0xCE 0xB9      |\n",
      "| U+1F66      | ὦ      | 0xE1 0xBD 0xA6 |         2 |        1 | 'ᾦ' → \"ὦι\" | 0xE1 0xBE 0xA6 → 0xE1 0xBD 0xA6 0xCE 0xB9      |\n",
      "| U+1F67      | ὧ      | 0xE1 0xBD 0xA7 |         2 |        1 | 'ᾧ' → \"ὧι\" | 0xE1 0xBE 0xA7 → 0xE1 0xBD 0xA7 0xCE 0xB9      |\n",
      "| U+006C      | l      | 0x6C           |         2 |        1 | 'ﬂ' → \"fl\" | 0xEF 0xAC 0x82 → 0x66 0x6C                     |\n",
      "| U+0576      | ն      | 0xD5 0xB6      |         2 |        1 | 'ﬓ' → \"մն\" | 0xEF 0xAC 0x93 → 0xD5 0xB4 0xD5 0xB6           |\n",
      "| U+0307      | ̇       | 0xCC 0x87      |         1 |        0 | 'İ' → \"i̇\"  | 0xC4 0xB0 → 0x69 0xCC 0x87                     |\n",
      "| U+02BC      | ʼ      | 0xCA 0xBC      |         1 |        0 | 'ŉ' → \"ʼn\" | 0xC5 0x89 → 0xCA 0xBC 0x6E                     |\n",
      "| U+006E      | n      | 0x6E           |         1 |        1 | 'ŉ' → \"ʼn\" | 0xC5 0x89 → 0xCA 0xBC 0x6E                     |\n",
      "| U+006A      | j      | 0x6A           |         1 |        1 | 'ǰ' → \"ǰ\"  | 0xC7 0xB0 → 0x6A 0xCC 0x8C                     |\n",
      "| U+030C      | ̌       | 0xCC 0x8C      |         1 |        0 | 'ǰ' → \"ǰ\"  | 0xC7 0xB0 → 0x6A 0xCC 0x8C                     |\n",
      "| U+0582      | ւ      | 0xD6 0x82      |         1 |        1 | 'և' → \"եւ\" | 0xD6 0x87 → 0xD5 0xA5 0xD6 0x82                |\n",
      "| U+0068      | h      | 0x68           |         1 |        1 | 'ẖ' → \"ẖ\"  | 0xE1 0xBA 0x96 → 0x68 0xCC 0xB1                |\n",
      "| U+0331      | ̱       | 0xCC 0xB1      |         1 |        0 | 'ẖ' → \"ẖ\"  | 0xE1 0xBA 0x96 → 0x68 0xCC 0xB1                |\n",
      "| U+0077      | w      | 0x77           |         1 |        1 | 'ẘ' → \"ẘ\"  | 0xE1 0xBA 0x98 → 0x77 0xCC 0x8A                |\n",
      "| U+0079      | y      | 0x79           |         1 |        1 | 'ẙ' → \"ẙ\"  | 0xE1 0xBA 0x99 → 0x79 0xCC 0x8A                |\n",
      "| U+0061      | a      | 0x61           |         1 |        1 | 'ẚ' → \"aʾ\" | 0xE1 0xBA 0x9A → 0x61 0xCA 0xBE                |\n",
      "| U+02BE      | ʾ      | 0xCA 0xBE      |         1 |        0 | 'ẚ' → \"aʾ\" | 0xE1 0xBA 0x9A → 0x61 0xCA 0xBE                |\n",
      "| U+1F70      | ὰ      | 0xE1 0xBD 0xB0 |         1 |        1 | 'ᾲ' → \"ὰι\" | 0xE1 0xBE 0xB2 → 0xE1 0xBD 0xB0 0xCE 0xB9      |\n",
      "| U+03AC      | ά      | 0xCE 0xAC      |         1 |        1 | 'ᾴ' → \"άι\" | 0xE1 0xBE 0xB4 → 0xCE 0xAC 0xCE 0xB9           |\n",
      "| U+1F74      | ὴ      | 0xE1 0xBD 0xB4 |         1 |        1 | 'ῂ' → \"ὴι\" | 0xE1 0xBF 0x82 → 0xE1 0xBD 0xB4 0xCE 0xB9      |\n",
      "| U+03AE      | ή      | 0xCE 0xAE      |         1 |        1 | 'ῄ' → \"ήι\" | 0xE1 0xBF 0x84 → 0xCE 0xAE 0xCE 0xB9           |\n",
      "| U+03C1      | ρ      | 0xCF 0x81      |         1 |        2 | 'ῤ' → \"ῤ\"  | 0xE1 0xBF 0xA4 → 0xCF 0x81 0xCC 0x93           |\n",
      "| U+1F7C      | ὼ      | 0xE1 0xBD 0xBC |         1 |        1 | 'ῲ' → \"ὼι\" | 0xE1 0xBF 0xB2 → 0xE1 0xBD 0xBC 0xCE 0xB9      |\n",
      "| U+03CE      | ώ      | 0xCF 0x8E      |         1 |        1 | 'ῴ' → \"ώι\" | 0xE1 0xBF 0xB4 → 0xCF 0x8E 0xCE 0xB9           |\n",
      "| U+056B      | ի      | 0xD5 0xAB      |         1 |        1 | 'ﬕ' → \"մի\" | 0xEF 0xAC 0x95 → 0xD5 0xB4 0xD5 0xAB           |\n",
      "| U+057E      | վ      | 0xD5 0xBE      |         1 |        1 | 'ﬖ' → \"վն\" | 0xEF 0xAC 0x96 → 0xD5 0xBE 0xD5 0xB6           |\n",
      "| U+056D      | խ      | 0xD5 0xAD      |         1 |        1 | 'ﬗ' → \"մխ\" | 0xEF 0xAC 0x97 → 0xD5 0xB4 0xD5 0xAD           |\n"
     ]
    }
   ],
   "source": [
    "rows = []\n",
    "for codepoint, partial_frequency in partial_target_frequency.most_common():\n",
    "    try:\n",
    "        character = chr(codepoint)\n",
    "        hex_bytes = utf8_hex(character)\n",
    "    except (ValueError, OverflowError):\n",
    "        character = \"?\"\n",
    "        hex_bytes = \"?\"\n",
    "\n",
    "    direct_frequency = direct_target_frequency.get(codepoint, 0)\n",
    "\n",
    "    # Find an example expansion containing this codepoint\n",
    "    example = \"\"\n",
    "    example_hex = \"\"\n",
    "    for source_codepoint, target_codepoints in case_folds.items():\n",
    "        if len(target_codepoints) > 1 and codepoint in target_codepoints:\n",
    "            try:\n",
    "                source_character = chr(source_codepoint)\n",
    "                target_string = \"\".join(chr(c) for c in target_codepoints)\n",
    "                example = f\"'{source_character}' → \\\"{target_string}\\\"\"\n",
    "                example_hex = f\"{utf8_hex(source_character)} → {utf8_hex(target_string)}\"\n",
    "            except (ValueError, OverflowError):\n",
    "                example = f\"U+{source_codepoint:04X} → {target_codepoints}\"\n",
    "                example_hex = \"\"\n",
    "            break\n",
    "\n",
    "    rows.append(\n",
    "        {\n",
    "            \"Codepoint\": f\"U+{codepoint:04X}\",\n",
    "            \"Char\": character,\n",
    "            \"UTF-8\": hex_bytes,\n",
    "            \"Partial\": partial_frequency,\n",
    "            \"Direct\": direct_frequency,\n",
    "            \"Example\": example,\n",
    "            \"Example Hex\": example_hex,\n",
    "        }\n",
    "    )\n",
    "\n",
    "print(tabulate(rows, headers=\"keys\", tablefmt=\"github\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Safe Single-byte Folding Anchors\n",
    "\n",
    "Of all those characters, we are most interested in the codepoints representable in just 1 byte in UTF-8, as we can process 64 of them in a `ZMM` register at once.\n",
    "Those are the boring ASCII letters.\n",
    "But we can't just apply traditional SIMD ASCII case-insensitive search techniques like:\n",
    "\n",
    "```c\n",
    "__m512i lower_mask = _mm512_set1_epi8(0x20);\n",
    "__m512i input_chunk = _mm512_loadu_si512(input_ptr);\n",
    "__m512i folded_chunk = _mm512_or_si512(input_chunk, lower_mask);\n",
    "```\n",
    "\n",
    "If the needle contains an `'f'` and the haystack contains an `'ﬃ'`, we would miss the match.\n",
    "So we must know, which of the single-byte codepoints are folding targets of multiple codepoints."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total ASCII targets: 26\n",
      "  - Safe (exactly 1 source): 14\n",
      "  - Ambiguous (multiple sources): 12\n"
     ]
    }
   ],
   "source": [
    "ascii_targets = {}\n",
    "for codepoint in range(UTF8_1BYTE_MAX + 1):\n",
    "    direct = direct_target_frequency.get(codepoint, 0)\n",
    "    partial = partial_target_frequency.get(codepoint, 0)\n",
    "    total = direct + partial\n",
    "    if total > 0:\n",
    "        ascii_targets[codepoint] = {\"direct\": direct, \"partial\": partial, \"total\": total}\n",
    "\n",
    "# Separate into \"safe\" (exactly 1 source) vs \"ambiguous\" (multiple sources)\n",
    "safe_ascii = {codepoint: info for codepoint, info in ascii_targets.items() if info[\"total\"] == 1}\n",
    "ambiguous_ascii = {codepoint: info for codepoint, info in ascii_targets.items() if info[\"total\"] > 1}\n",
    "\n",
    "print(f\"Total ASCII targets: {len(ascii_targets)}\")\n",
    "print(f\"  - Safe (exactly 1 source): {len(safe_ascii)}\")\n",
    "print(f\"  - Ambiguous (multiple sources): {len(ambiguous_ascii)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table shows safe ASCII targets that can use simple SIMD case folding (each has exactly one source):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Target       | Target Hex   | Source       | Source Hex   |\n",
      "|--------------|--------------|--------------|--------------|\n",
      "| 'b' (U+0062) | 0x62         | 'B' (U+0042) | 0x42         |\n",
      "| 'c' (U+0063) | 0x63         | 'C' (U+0043) | 0x43         |\n",
      "| 'd' (U+0064) | 0x64         | 'D' (U+0044) | 0x44         |\n",
      "| 'e' (U+0065) | 0x65         | 'E' (U+0045) | 0x45         |\n",
      "| 'g' (U+0067) | 0x67         | 'G' (U+0047) | 0x47         |\n",
      "| 'm' (U+006D) | 0x6D         | 'M' (U+004D) | 0x4D         |\n",
      "| 'o' (U+006F) | 0x6F         | 'O' (U+004F) | 0x4F         |\n",
      "| 'p' (U+0070) | 0x70         | 'P' (U+0050) | 0x50         |\n",
      "| 'q' (U+0071) | 0x71         | 'Q' (U+0051) | 0x51         |\n",
      "| 'r' (U+0072) | 0x72         | 'R' (U+0052) | 0x52         |\n",
      "| 'u' (U+0075) | 0x75         | 'U' (U+0055) | 0x55         |\n",
      "| 'v' (U+0076) | 0x76         | 'V' (U+0056) | 0x56         |\n",
      "| 'x' (U+0078) | 0x78         | 'X' (U+0058) | 0x58         |\n",
      "| 'z' (U+007A) | 0x7A         | 'Z' (U+005A) | 0x5A         |\n"
     ]
    }
   ],
   "source": [
    "safe_rows = []\n",
    "for codepoint in sorted(safe_ascii.keys()):\n",
    "    character = chr(codepoint)\n",
    "    for source_codepoint, target_codepoints in case_folds.items():\n",
    "        if codepoint in target_codepoints:\n",
    "            source_character = chr(source_codepoint)\n",
    "            safe_rows.append(\n",
    "                {\n",
    "                    \"Target\": f\"'{character}' (U+{codepoint:04X})\",\n",
    "                    \"Target Hex\": utf8_hex(character),\n",
    "                    \"Source\": f\"'{source_character}' (U+{source_codepoint:04X})\",\n",
    "                    \"Source Hex\": utf8_hex(source_character),\n",
    "                }\n",
    "            )\n",
    "            break\n",
    "\n",
    "print(tabulate(safe_rows, headers=\"keys\", tablefmt=\"github\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table shows ambiguous ASCII targets that need special handling in SIMD (each has multiple sources):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Char   | Hex   |   Direct |   Partial |   Total | Sources                                                                                                                             |\n",
      "|--------|-------|----------|-----------|---------|-------------------------------------------------------------------------------------------------------------------------------------|\n",
      "| 'a'    | 0x61  |        1 |         1 |       2 | 'A' (0x41), 'ẚ'→\"aʾ\" (0xE1 0xBA 0x9A→0x61 0xCA 0xBE)                                                                                |\n",
      "| 'f'    | 0x66  |        1 |         8 |       9 | 'F' (0x46), 'ﬀ'→\"ff\" (0xEF 0xAC 0x80→0x66 0x66), 'ﬁ'→\"fi\" (0xEF 0xAC 0x81→0x66 0x69), 'ﬂ'→\"fl\" (0xEF 0xAC 0x82→0x66 0x6C) (+2 more) |\n",
      "| 'h'    | 0x68  |        1 |         1 |       2 | 'H' (0x48), 'ẖ'→\"ẖ\" (0xE1 0xBA 0x96→0x68 0xCC 0xB1)                                                                                 |\n",
      "| 'i'    | 0x69  |        1 |         3 |       4 | 'I' (0x49), 'İ'→\"i̇\" (0xC4 0xB0→0x69 0xCC 0x87), 'ﬁ'→\"fi\" (0xEF 0xAC 0x81→0x66 0x69), 'ﬃ'→\"ffi\" (0xEF 0xAC 0x83→0x66 0x66 0x69)      |\n",
      "| 'j'    | 0x6A  |        1 |         1 |       2 | 'J' (0x4A), 'ǰ'→\"ǰ\" (0xC7 0xB0→0x6A 0xCC 0x8C)                                                                                      |\n",
      "| 'k'    | 0x6B  |        2 |         0 |       2 | 'K' (0x4B), 'K' (0xE2 0x84 0xAA)                                                                                                    |\n",
      "| 'l'    | 0x6C  |        1 |         2 |       3 | 'L' (0x4C), 'ﬂ'→\"fl\" (0xEF 0xAC 0x82→0x66 0x6C), 'ﬄ'→\"ffl\" (0xEF 0xAC 0x84→0x66 0x66 0x6C)                                          |\n",
      "| 'n'    | 0x6E  |        1 |         1 |       2 | 'N' (0x4E), 'ŉ'→\"ʼn\" (0xC5 0x89→0xCA 0xBC 0x6E)                                                                                     |\n",
      "| 's'    | 0x73  |        2 |         6 |       8 | 'S' (0x53), 'ß'→\"ss\" (0xC3 0x9F→0x73 0x73), 'ſ' (0xC5 0xBF), 'ẞ'→\"ss\" (0xE1 0xBA 0x9E→0x73 0x73) (+2 more)                          |\n",
      "| 't'    | 0x74  |        1 |         3 |       4 | 'T' (0x54), 'ẗ'→\"ẗ\" (0xE1 0xBA 0x97→0x74 0xCC 0x88), 'ﬅ'→\"st\" (0xEF 0xAC 0x85→0x73 0x74), 'ﬆ'→\"st\" (0xEF 0xAC 0x86→0x73 0x74)       |\n",
      "| 'w'    | 0x77  |        1 |         1 |       2 | 'W' (0x57), 'ẘ'→\"ẘ\" (0xE1 0xBA 0x98→0x77 0xCC 0x8A)                                                                                 |\n",
      "| 'y'    | 0x79  |        1 |         1 |       2 | 'Y' (0x59), 'ẙ'→\"ẙ\" (0xE1 0xBA 0x99→0x79 0xCC 0x8A)                                                                                 |\n"
     ]
    }
   ],
   "source": [
    "ambiguous_rows = []\n",
    "for codepoint in sorted(ambiguous_ascii.keys()):\n",
    "    character = chr(codepoint)\n",
    "    info = ambiguous_ascii[codepoint]\n",
    "\n",
    "    # Find all sources\n",
    "    sources = []\n",
    "    for source_codepoint, target_codepoints in case_folds.items():\n",
    "        if codepoint in target_codepoints:\n",
    "            try:\n",
    "                source_character = chr(source_codepoint)\n",
    "                source_hex = utf8_hex(source_character)\n",
    "                if len(target_codepoints) == 1:\n",
    "                    sources.append(f\"'{source_character}' ({source_hex})\")\n",
    "                else:\n",
    "                    target_string = \"\".join(chr(c) for c in target_codepoints)\n",
    "                    target_hex = utf8_hex(target_string)\n",
    "                    sources.append(f\"'{source_character}'→\\\"{target_string}\\\" ({source_hex}→{target_hex})\")\n",
    "            except:\n",
    "                sources.append(f\"U+{source_codepoint:04X}\")\n",
    "\n",
    "    sources_string = \", \".join(sources[:4])\n",
    "    if len(sources) > 4:\n",
    "        sources_string += f\" (+{len(sources)-4} more)\"\n",
    "\n",
    "    ambiguous_rows.append(\n",
    "        {\n",
    "            \"Char\": f\"'{character}'\",\n",
    "            \"Hex\": utf8_hex(character),\n",
    "            \"Direct\": info[\"direct\"],\n",
    "            \"Partial\": info[\"partial\"],\n",
    "            \"Total\": info[\"total\"],\n",
    "            \"Sources\": sources_string,\n",
    "        }\n",
    "    )\n",
    "\n",
    "print(tabulate(ambiguous_rows, headers=\"keys\", tablefmt=\"github\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, even \"ambiguous\" ASCII characters can be contextually safe based on what follows them in the needle.\n",
    "For example, `'f'` is ambiguous because of ligatures like `'ﬁ'` → `\"fi\"`.\n",
    "But if the needle contains `\"fog\"`, the `'f'` is safe because no ligature expands to `\"fo...\"`.\n",
    "The following analysis identifies when each ambiguous character becomes safe based on its context:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Char   | Hex   | Safe following                          | Safe preceding       | Examples                     |\n",
      "|--------|-------|-----------------------------------------|----------------------|------------------------------|\n",
      "| 'a'    | 0x61  | NOT: 'ʾ' (0xCA 0xBE)                    | any                  | 'ẚ'→\"aʾ\"                     |\n",
      "| 'f'    | 0x66  | NOT: 'f' (0x66), 'i' (0x69), 'l' (0x6C) | NOT: 'f' (0x66)      | 'ﬀ'→\"ff\", 'ﬁ'→\"fi\", 'ﬂ'→\"fl\" |\n",
      "| 'h'    | 0x68  | NOT: '̱' (0xCC 0xB1)                     | any                  | 'ẖ'→\"ẖ\"                      |\n",
      "| 'i'    | 0x69  | NOT: '̇' (0xCC 0x87)                     | NOT: 'f' (0x66)      | 'İ'→\"i̇\"                      |\n",
      "| 'j'    | 0x6A  | NOT: '̌' (0xCC 0x8C)                     | any                  | 'ǰ'→\"ǰ\"                      |\n",
      "| 'l'    | 0x6C  | any                                     | NOT: 'f' (0x66)      |                              |\n",
      "| 'n'    | 0x6E  | any                                     | NOT: 'ʼ' (0xCA 0xBC) |                              |\n",
      "| 's'    | 0x73  | NOT: 's' (0x73), 't' (0x74)             | NOT: 's' (0x73)      | 'ß'→\"ss\", 'ẞ'→\"ss\", 'ﬅ'→\"st\" |\n",
      "| 't'    | 0x74  | NOT: '̈' (0xCC 0x88)                     | NOT: 's' (0x73)      | 'ẗ'→\"ẗ\"                      |\n",
      "| 'w'    | 0x77  | NOT: '̊' (0xCC 0x8A)                     | any                  | 'ẘ'→\"ẘ\"                      |\n",
      "| 'y'    | 0x79  | NOT: '̊' (0xCC 0x8A)                     | any                  | 'ẙ'→\"ẙ\"                      |\n"
     ]
    }
   ],
   "source": [
    "contextual_safety = {}\n",
    "\n",
    "for codepoint in ambiguous_ascii.keys():\n",
    "    char = chr(codepoint)\n",
    "    dangerous_following = set()\n",
    "    dangerous_preceding = set()\n",
    "    ligature_examples = []\n",
    "\n",
    "    # Find all multi-codepoint expansions that include this character\n",
    "    for source_codepoint, target_codepoints in case_folds.items():\n",
    "        if len(target_codepoints) > 1:  # Multi-codepoint expansion\n",
    "            expansion = \"\".join(chr(c) for c in target_codepoints)\n",
    "\n",
    "            # Find all positions where our character appears\n",
    "            for pos, c in enumerate(expansion):\n",
    "                if ord(c) == codepoint:\n",
    "                    source_char = chr(source_codepoint)\n",
    "\n",
    "                    # If not the last character, next char is \"dangerous following\"\n",
    "                    if pos < len(expansion) - 1:\n",
    "                        next_char = expansion[pos + 1]\n",
    "                        dangerous_following.add(next_char)\n",
    "                        if len(ligature_examples) < 3:\n",
    "                            ligature_examples.append(f\"'{source_char}'→\\\"{expansion}\\\"\")\n",
    "\n",
    "                    # If not the first character, prev char is \"dangerous preceding\"\n",
    "                    if pos > 0:\n",
    "                        prev_char = expansion[pos - 1]\n",
    "                        dangerous_preceding.add(prev_char)\n",
    "\n",
    "    if dangerous_following or dangerous_preceding:\n",
    "        contextual_safety[char] = {\n",
    "            \"dangerous_following\": dangerous_following,\n",
    "            \"dangerous_preceding\": dangerous_preceding,\n",
    "            \"examples\": ligature_examples,\n",
    "        }\n",
    "\n",
    "# Build output table\n",
    "context_rows = []\n",
    "for char in sorted(contextual_safety.keys()):\n",
    "    info = contextual_safety[char]\n",
    "    following = info[\"dangerous_following\"]\n",
    "    preceding = info[\"dangerous_preceding\"]\n",
    "\n",
    "    if following:\n",
    "        following_chars = \", \".join(f\"'{c}' ({utf8_hex(c)})\" for c in sorted(following))\n",
    "        safe_following = f\"NOT: {following_chars}\"\n",
    "    else:\n",
    "        safe_following = \"any\"\n",
    "\n",
    "    if preceding:\n",
    "        preceding_chars = \", \".join(f\"'{c}' ({utf8_hex(c)})\" for c in sorted(preceding))\n",
    "        safe_preceding = f\"NOT: {preceding_chars}\"\n",
    "    else:\n",
    "        safe_preceding = \"any\"\n",
    "\n",
    "    context_rows.append(\n",
    "        {\n",
    "            \"Char\": f\"'{char}'\",\n",
    "            \"Hex\": utf8_hex(char),\n",
    "            \"Safe following\": safe_following,\n",
    "            \"Safe preceding\": safe_preceding,\n",
    "            \"Examples\": \", \".join(info[\"examples\"]),\n",
    "        }\n",
    "    )\n",
    "\n",
    "print(tabulate(context_rows, headers=\"keys\", tablefmt=\"github\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looking at this, if the needle contains a continuous sequence of `'b'`, `'c'`, `'d'`, `'e'`, `'g'`, `'m'`, `'o'`, `'p'`, `'q'`, `'r'`, `'u'`, `'v'`, `'x'`, `'z'` in any order or case, we can trivially match them using the simple SIMD snippet from above, as long as it doesn't contain `'a'`, `'f'`, `'h'`, `'i'`, `'j'`, `'k'`, `'l'`, `'n'`, `'s'`, `'t'`, `'w'`, or `'y'`.\n",
    "\n",
    "Moreover, there is a group of single-byte UTF-8 codepoints that don't participate in any folding mappings at all:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ASCII codepoints completely uninvolved in folding: 76\n",
      "Control characters: 33 (0x00-0x1F, 0x7F)\n",
      "Digits: 0123456789\n",
      "Punctuation/Symbols:  !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\n"
     ]
    }
   ],
   "source": [
    "uninvolved_ascii = [\n",
    "    codepoint\n",
    "    for codepoint in range(UTF8_1BYTE_MAX + 1)\n",
    "    if codepoint not in ascii_targets and codepoint not in case_folds\n",
    "]\n",
    "print(f\"ASCII codepoints completely uninvolved in folding: {len(uninvolved_ascii)}\")\n",
    "\n",
    "control_characters = [codepoint for codepoint in uninvolved_ascii if codepoint < 32 or codepoint == 127]\n",
    "digits = [chr(codepoint) for codepoint in uninvolved_ascii if chr(codepoint).isdigit()]\n",
    "punctuation = [\n",
    "    chr(codepoint) for codepoint in uninvolved_ascii if 32 <= codepoint < 127 and not chr(codepoint).isalnum()\n",
    "]\n",
    "\n",
    "print(f\"Control characters: {len(control_characters)} (0x00-0x1F, 0x7F)\")\n",
    "print(f\"Digits: {''.join(digits)}\")\n",
    "print(f\"Punctuation/Symbols: {''.join(punctuation)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Safe Two-byte Folding Anchors\n",
    "\n",
    "The more interesting and challenging part is the 2-byte UTF-8 codepoints that map into either other single 2-byte codepoint or two 1-byte codepoints."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2-byte UTF-8 codepoints with case folding: 460\n",
      "\n",
      "Folding patterns for 2-byte UTF-8 sources:\n",
      "  2-byte → 1-byte:     1\n",
      "  2-byte → 2-byte:     450\n",
      "  2-byte → 2x 1-byte:  1\n",
      "  Other patterns:      8\n"
     ]
    }
   ],
   "source": [
    "two_byte_folds = {}\n",
    "for source_codepoint, target_codepoints in case_folds.items():\n",
    "    if UTF8_1BYTE_MAX < source_codepoint <= UTF8_2BYTE_MAX:  # 2-byte UTF-8 range\n",
    "        two_byte_folds[source_codepoint] = target_codepoints\n",
    "\n",
    "print(f\"2-byte UTF-8 codepoints with case folding: {len(two_byte_folds):,}\")\n",
    "print()\n",
    "\n",
    "# Categorize by target type\n",
    "folds_to_1byte = {}  # 2-byte → single 1-byte (e.g., some Latin letters)\n",
    "folds_to_2byte = {}  # 2-byte → single 2-byte (most common)\n",
    "folds_to_2x1byte = {}  # 2-byte → two 1-byte codepoints\n",
    "folds_to_other = {}  # Other patterns\n",
    "\n",
    "for source_codepoint, target_codepoints in two_byte_folds.items():\n",
    "    target_sizes = [\n",
    "        (\n",
    "            1\n",
    "            if codepoint <= UTF8_1BYTE_MAX\n",
    "            else 2 if codepoint <= UTF8_2BYTE_MAX else 3 if codepoint <= UTF8_3BYTE_MAX else 4\n",
    "        )\n",
    "        for codepoint in target_codepoints\n",
    "    ]\n",
    "\n",
    "    if len(target_codepoints) == 1:\n",
    "        if target_sizes[0] == 1:\n",
    "            folds_to_1byte[source_codepoint] = target_codepoints\n",
    "        elif target_sizes[0] == 2:\n",
    "            folds_to_2byte[source_codepoint] = target_codepoints\n",
    "        else:\n",
    "            folds_to_other[source_codepoint] = target_codepoints\n",
    "    elif len(target_codepoints) == 2 and all(size == 1 for size in target_sizes):\n",
    "        folds_to_2x1byte[source_codepoint] = target_codepoints\n",
    "    else:\n",
    "        folds_to_other[source_codepoint] = target_codepoints\n",
    "\n",
    "print(f\"Folding patterns for 2-byte UTF-8 sources:\")\n",
    "print(f\"  2-byte → 1-byte:     {len(folds_to_1byte):,}\")\n",
    "print(f\"  2-byte → 2-byte:     {len(folds_to_2byte):,}\")\n",
    "print(f\"  2-byte → 2x 1-byte:  {len(folds_to_2x1byte):,}\")\n",
    "print(f\"  Other patterns:      {len(folds_to_other):,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Of the 460 case folding rules for 2-byte UTF-8 sources, the vast majority (450) map to another 2-byte codepoint.\n",
    "The remaining 10 are special cases worth understanding.\n",
    "\n",
    "2-byte → 1-byte (1 case):\n",
    "\n",
    "- `'ſ'` (U+017F, LATIN SMALL LETTER LONG S) → `'s'` - historical long S folds to regular ASCII s\n",
    "\n",
    "2-byte → 2x 1-byte (1 case):\n",
    "\n",
    "- `'ß'` (U+00DF, LATIN SMALL LETTER SHARP S) → `\"ss\"` - German eszett expands to two ASCII characters\n",
    "\n",
    "Other patterns (8 cases) are the tricky edge cases that don't fit clean patterns:\n",
    "\n",
    "- `'İ'` (U+0130) → `'i'` + combining dot above (1-byte + 2-byte) - Turkish capital I with dot\n",
    "- `'ŉ'` (U+0149) → modifier apostrophe + `'n'` (2-byte + 1-byte) - deprecated character\n",
    "- `'ǰ'` (U+01F0) → `'j'` + combining caron (1-byte + 2-byte) - J with caron decomposes\n",
    "- `'Ⱥ'` (U+023A) → `'ⱥ'` (U+2C65) - 2-byte source maps to 3-byte target!\n",
    "- `'Ⱦ'` (U+023E) → `'ⱦ'` (U+2C66) - another 2-byte → 3-byte case\n",
    "- `'ΐ'` (U+0390) → ι + combining diaeresis + combining acute (3x 2-byte) - Greek with diacritics\n",
    "- `'ΰ'` (U+03B0) → υ + combining diaeresis + combining acute (3x 2-byte) - Greek with diacritics\n",
    "- `'և'` (U+0587) → ե + ւ (2x 2-byte) - Armenian ligature\n",
    "\n",
    "The `'Ⱥ'` and `'Ⱦ'` cases are particularly noteworthy: they are 2-byte UTF-8 sources that fold to 3-byte targets, meaning the folded form is longer than the original!\n",
    "Assuming the much larger search space, where possible, we want to group them into continuous to/from ranges."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table shows continuous ranges of 2-byte UTF-8 codepoints that fold to other 2-byte codepoints with a constant offset (e.g., uppercase → lowercase within the same script block):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 308 continuous ranges of 2-byte → 2-byte foldings\n",
      "Ranges of length > 1: 12\n",
      "Single-codepoint 'ranges': 296\n"
     ]
    }
   ],
   "source": [
    "sorted_2byte = sorted(folds_to_2byte.items())\n",
    "\n",
    "ranges = []\n",
    "if sorted_2byte:\n",
    "    range_start = sorted_2byte[0][0]\n",
    "    range_offset = sorted_2byte[0][1][0] - sorted_2byte[0][0]\n",
    "    prev_source = sorted_2byte[0][0]\n",
    "\n",
    "    for source_codepoint, target_codepoints in sorted_2byte[1:]:\n",
    "        target_codepoint = target_codepoints[0]\n",
    "        current_offset = target_codepoint - source_codepoint\n",
    "\n",
    "        # Check if this continues the current range (consecutive source AND same offset)\n",
    "        if source_codepoint == prev_source + 1 and current_offset == range_offset:\n",
    "            prev_source = source_codepoint\n",
    "        else:\n",
    "            # End the current range and start a new one\n",
    "            ranges.append((range_start, prev_source, range_offset))\n",
    "            range_start = source_codepoint\n",
    "            range_offset = current_offset\n",
    "            prev_source = source_codepoint\n",
    "\n",
    "    # Don't forget the last range\n",
    "    ranges.append((range_start, prev_source, range_offset))\n",
    "\n",
    "print(f\"Found {len(ranges)} continuous ranges of 2-byte → 2-byte foldings\")\n",
    "print(f\"Ranges of length > 1: {sum(1 for r in ranges if r[1] - r[0] > 0)}\")\n",
    "print(f\"Single-codepoint 'ranges': {sum(1 for r in ranges if r[1] == r[0])}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table shows multi-codepoint ranges (length > 1) which are useful for SIMD optimization:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Src Start   | Src Start Hex   | Src End    | Src End Hex   | Tgt Start   | Tgt End    |   Len |   Offset | Script   |\n",
      "|-------------|-----------------|------------|---------------|-------------|------------|-------|----------|----------|\n",
      "| U+00C0 (À)  | 0xC3 0x80       | U+00D6 (Ö) | 0xC3 0x96     | U+00E0 (à)  | U+00F6 (ö) |    23 |      +32 | LATIN    |\n",
      "| U+00D8 (Ø)  | 0xC3 0x98       | U+00DE (Þ) | 0xC3 0x9E     | U+00F8 (ø)  | U+00FE (þ) |     7 |      +32 | LATIN    |\n",
      "| U+0189 (Ɖ)  | 0xC6 0x89       | U+018A (Ɗ) | 0xC6 0x8A     | U+0256 (ɖ)  | U+0257 (ɗ) |     2 |     +205 | LATIN    |\n",
      "| U+01B1 (Ʊ)  | 0xC6 0xB1       | U+01B2 (Ʋ) | 0xC6 0xB2     | U+028A (ʊ)  | U+028B (ʋ) |     2 |     +217 | LATIN    |\n",
      "| U+0388 (Έ)  | 0xCE 0x88       | U+038A (Ί) | 0xCE 0x8A     | U+03AD (έ)  | U+03AF (ί) |     3 |      +37 | GREEK    |\n",
      "| U+038E (Ύ)  | 0xCE 0x8E       | U+038F (Ώ) | 0xCE 0x8F     | U+03CD (ύ)  | U+03CE (ώ) |     2 |      +63 | GREEK    |\n",
      "| U+0391 (Α)  | 0xCE 0x91       | U+03A1 (Ρ) | 0xCE 0xA1     | U+03B1 (α)  | U+03C1 (ρ) |    17 |      +32 | GREEK    |\n",
      "| U+03A3 (Σ)  | 0xCE 0xA3       | U+03AB (Ϋ) | 0xCE 0xAB     | U+03C3 (σ)  | U+03CB (ϋ) |     9 |      +32 | GREEK    |\n",
      "| U+03FD (Ͻ)  | 0xCF 0xBD       | U+03FF (Ͽ) | 0xCF 0xBF     | U+037B (ͻ)  | U+037D (ͽ) |     3 |     -130 | GREEK    |\n",
      "| U+0400 (Ѐ)  | 0xD0 0x80       | U+040F (Џ) | 0xD0 0x8F     | U+0450 (ѐ)  | U+045F (џ) |    16 |      +80 | CYRILLIC |\n",
      "| U+0410 (А)  | 0xD0 0x90       | U+042F (Я) | 0xD0 0xAF     | U+0430 (а)  | U+044F (я) |    32 |      +32 | CYRILLIC |\n",
      "| U+0531 (Ա)  | 0xD4 0xB1       | U+0556 (Ֆ) | 0xD5 0x96     | U+0561 (ա)  | U+0586 (ֆ) |    38 |      +48 | ARMENIAN |\n"
     ]
    }
   ],
   "source": [
    "# Build table with range information\n",
    "range_rows = []\n",
    "for start, end, offset in ranges:\n",
    "    length = end - start + 1\n",
    "    try:\n",
    "        start_char = chr(start)\n",
    "        end_char = chr(end)\n",
    "        target_start_char = chr(start + offset)\n",
    "        target_end_char = chr(end + offset)\n",
    "        script = unicodedata.name(start_char, \"\").split()[0] if length > 1 else \"\"\n",
    "    except (ValueError, OverflowError):\n",
    "        start_char = end_char = target_start_char = target_end_char = \"?\"\n",
    "        script = \"\"\n",
    "\n",
    "    range_rows.append(\n",
    "        {\n",
    "            \"Src Start\": f\"U+{start:04X} ({start_char})\",\n",
    "            \"Src Start Hex\": utf8_hex(start_char),\n",
    "            \"Src End\": f\"U+{end:04X} ({end_char})\",\n",
    "            \"Src End Hex\": utf8_hex(end_char),\n",
    "            \"Tgt Start\": f\"U+{start + offset:04X} ({target_start_char})\",\n",
    "            \"Tgt End\": f\"U+{end + offset:04X} ({target_end_char})\",\n",
    "            \"Len\": length,\n",
    "            \"Offset\": f\"+{offset}\" if offset > 0 else str(offset),\n",
    "            \"Script\": script,\n",
    "        }\n",
    "    )\n",
    "\n",
    "multi_ranges = [r for r in range_rows if r[\"Len\"] > 1]\n",
    "print(tabulate(multi_ranges, headers=\"keys\", tablefmt=\"github\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Three-byte UTF-8 Case Folding\n",
    "\n",
    "3-byte UTF-8 covers codepoints U+0800 to U+FFFF (2048 to 65535).\n",
    "This includes many scripts: Extended Greek, Cherokee, Georgian, and various symbol blocks."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3-byte UTF-8 codepoints with case folding: 792\n",
      "\n",
      "Folding patterns for 3-byte UTF-8 sources:\n",
      "  3-byte → 3-byte:  663\n",
      "  3-byte → 2-byte:  31\n",
      "  3-byte → 1-byte:  1\n",
      "  Other patterns:   97\n"
     ]
    }
   ],
   "source": [
    "# 3-byte UTF-8 codepoints: U+0800 to U+FFFF (2048 to 65535)\n",
    "three_byte_folds = {}\n",
    "for source_codepoint, target_codepoints in case_folds.items():\n",
    "    if UTF8_2BYTE_MAX < source_codepoint <= UTF8_3BYTE_MAX:\n",
    "        three_byte_folds[source_codepoint] = target_codepoints\n",
    "\n",
    "print(f\"3-byte UTF-8 codepoints with case folding: {len(three_byte_folds):,}\")\n",
    "print()\n",
    "\n",
    "# Categorize by target pattern\n",
    "three_to_3byte = {}  # 3-byte → single 3-byte\n",
    "three_to_2byte = {}  # 3-byte → single 2-byte (shrinks!)\n",
    "three_to_1byte = {}  # 3-byte → 1-byte sequence\n",
    "three_to_other = {}  # Multi-codepoint or mixed\n",
    "\n",
    "for source_codepoint, target_codepoints in three_byte_folds.items():\n",
    "    target_sizes = [\n",
    "        1 if cp <= UTF8_1BYTE_MAX else 2 if cp <= UTF8_2BYTE_MAX else 3 if cp <= UTF8_3BYTE_MAX else 4\n",
    "        for cp in target_codepoints\n",
    "    ]\n",
    "\n",
    "    if len(target_codepoints) == 1:\n",
    "        if target_sizes[0] == 3:\n",
    "            three_to_3byte[source_codepoint] = target_codepoints\n",
    "        elif target_sizes[0] == 2:\n",
    "            three_to_2byte[source_codepoint] = target_codepoints\n",
    "        elif target_sizes[0] == 1:\n",
    "            three_to_1byte[source_codepoint] = target_codepoints\n",
    "        else:\n",
    "            three_to_other[source_codepoint] = target_codepoints\n",
    "    else:\n",
    "        three_to_other[source_codepoint] = target_codepoints\n",
    "\n",
    "print(f\"Folding patterns for 3-byte UTF-8 sources:\")\n",
    "print(f\"  3-byte → 3-byte:  {len(three_to_3byte):,}\")\n",
    "print(f\"  3-byte → 2-byte:  {len(three_to_2byte):,}\")\n",
    "print(f\"  3-byte → 1-byte:  {len(three_to_1byte):,}\")\n",
    "print(f\"  Other patterns:   {len(three_to_other):,}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table shows continuous ranges of 3-byte UTF-8 codepoints that fold to other 3-byte codepoints:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 337 continuous ranges of 3-byte → 3-byte foldings\n",
      "Ranges of length > 1: 24\n",
      "Single-codepoint 'ranges': 313\n"
     ]
    }
   ],
   "source": [
    "# Find continuous ranges of 3-byte → 3-byte foldings\n",
    "sorted_3byte = sorted(three_to_3byte.items())\n",
    "\n",
    "ranges_3byte = []\n",
    "if sorted_3byte:\n",
    "    range_start = sorted_3byte[0][0]\n",
    "    range_offset = sorted_3byte[0][1][0] - sorted_3byte[0][0]\n",
    "    prev_source = sorted_3byte[0][0]\n",
    "\n",
    "    for source_codepoint, target_codepoints in sorted_3byte[1:]:\n",
    "        target_codepoint = target_codepoints[0]\n",
    "        current_offset = target_codepoint - source_codepoint\n",
    "\n",
    "        if source_codepoint == prev_source + 1 and current_offset == range_offset:\n",
    "            prev_source = source_codepoint\n",
    "        else:\n",
    "            ranges_3byte.append((range_start, prev_source, range_offset))\n",
    "            range_start = source_codepoint\n",
    "            range_offset = current_offset\n",
    "            prev_source = source_codepoint\n",
    "\n",
    "    ranges_3byte.append((range_start, prev_source, range_offset))\n",
    "\n",
    "print(f\"Found {len(ranges_3byte)} continuous ranges of 3-byte → 3-byte foldings\")\n",
    "print(f\"Ranges of length > 1: {sum(1 for r in ranges_3byte if r[1] - r[0] > 0)}\")\n",
    "print(f\"Single-codepoint 'ranges': {sum(1 for r in ranges_3byte if r[1] == r[0])}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following table shows multi-codepoint ranges (length > 1) which are useful for SIMD optimization:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Src Start   | Src Start Hex   | Src End     | Src End Hex    | Tgt Start   | Tgt End     |   Len |   Offset | Script     |\n",
      "|-------------|-----------------|-------------|----------------|-------------|-------------|-------|----------|------------|\n",
      "| U+10A0 (Ⴀ)  | 0xE1 0x82 0xA0  | U+10C5 (Ⴥ)  | 0xE1 0x83 0x85 | U+2D00 (ⴀ)  | U+2D25 (ⴥ)  |    38 |    +7264 | GEORGIAN   |\n",
      "| U+13F8 (ᏸ)  | 0xE1 0x8F 0xB8  | U+13FD (ᏽ)  | 0xE1 0x8F 0xBD | U+13F0 (Ᏸ)  | U+13F5 (Ᏽ)  |     6 |       -8 | CHEROKEE   |\n",
      "| U+1C90 (Ა)  | 0xE1 0xB2 0x90  | U+1CBA (Ჺ)  | 0xE1 0xB2 0xBA | U+10D0 (ა)  | U+10FA (ჺ)  |    43 |    -3008 | GEORGIAN   |\n",
      "| U+1CBD (Ჽ)  | 0xE1 0xB2 0xBD  | U+1CBF (Ჿ)  | 0xE1 0xB2 0xBF | U+10FD (ჽ)  | U+10FF (ჿ)  |     3 |    -3008 | GEORGIAN   |\n",
      "| U+1F08 (Ἀ)  | 0xE1 0xBC 0x88  | U+1F0F (Ἇ)  | 0xE1 0xBC 0x8F | U+1F00 (ἀ)  | U+1F07 (ἇ)  |     8 |       -8 | GREEK      |\n",
      "| U+1F18 (Ἐ)  | 0xE1 0xBC 0x98  | U+1F1D (Ἕ)  | 0xE1 0xBC 0x9D | U+1F10 (ἐ)  | U+1F15 (ἕ)  |     6 |       -8 | GREEK      |\n",
      "| U+1F28 (Ἠ)  | 0xE1 0xBC 0xA8  | U+1F2F (Ἧ)  | 0xE1 0xBC 0xAF | U+1F20 (ἠ)  | U+1F27 (ἧ)  |     8 |       -8 | GREEK      |\n",
      "| U+1F38 (Ἰ)  | 0xE1 0xBC 0xB8  | U+1F3F (Ἷ)  | 0xE1 0xBC 0xBF | U+1F30 (ἰ)  | U+1F37 (ἷ)  |     8 |       -8 | GREEK      |\n",
      "| U+1F48 (Ὀ)  | 0xE1 0xBD 0x88  | U+1F4D (Ὅ)  | 0xE1 0xBD 0x8D | U+1F40 (ὀ)  | U+1F45 (ὅ)  |     6 |       -8 | GREEK      |\n",
      "| U+1F68 (Ὠ)  | 0xE1 0xBD 0xA8  | U+1F6F (Ὧ)  | 0xE1 0xBD 0xAF | U+1F60 (ὠ)  | U+1F67 (ὧ)  |     8 |       -8 | GREEK      |\n",
      "| U+1FB8 (Ᾰ)  | 0xE1 0xBE 0xB8  | U+1FB9 (Ᾱ)  | 0xE1 0xBE 0xB9 | U+1FB0 (ᾰ)  | U+1FB1 (ᾱ)  |     2 |       -8 | GREEK      |\n",
      "| U+1FBA (Ὰ)  | 0xE1 0xBE 0xBA  | U+1FBB (Ά)  | 0xE1 0xBE 0xBB | U+1F70 (ὰ)  | U+1F71 (ά)  |     2 |      -74 | GREEK      |\n",
      "| U+1FC8 (Ὲ)  | 0xE1 0xBF 0x88  | U+1FCB (Ή)  | 0xE1 0xBF 0x8B | U+1F72 (ὲ)  | U+1F75 (ή)  |     4 |      -86 | GREEK      |\n",
      "| U+1FD8 (Ῐ)  | 0xE1 0xBF 0x98  | U+1FD9 (Ῑ)  | 0xE1 0xBF 0x99 | U+1FD0 (ῐ)  | U+1FD1 (ῑ)  |     2 |       -8 | GREEK      |\n",
      "| U+1FDA (Ὶ)  | 0xE1 0xBF 0x9A  | U+1FDB (Ί)  | 0xE1 0xBF 0x9B | U+1F76 (ὶ)  | U+1F77 (ί)  |     2 |     -100 | GREEK      |\n",
      "| U+1FE8 (Ῠ)  | 0xE1 0xBF 0xA8  | U+1FE9 (Ῡ)  | 0xE1 0xBF 0xA9 | U+1FE0 (ῠ)  | U+1FE1 (ῡ)  |     2 |       -8 | GREEK      |\n",
      "| U+1FEA (Ὺ)  | 0xE1 0xBF 0xAA  | U+1FEB (Ύ)  | 0xE1 0xBF 0xAB | U+1F7A (ὺ)  | U+1F7B (ύ)  |     2 |     -112 | GREEK      |\n",
      "| U+1FF8 (Ὸ)  | 0xE1 0xBF 0xB8  | U+1FF9 (Ό)  | 0xE1 0xBF 0xB9 | U+1F78 (ὸ)  | U+1F79 (ό)  |     2 |     -128 | GREEK      |\n",
      "| U+1FFA (Ὼ)  | 0xE1 0xBF 0xBA  | U+1FFB (Ώ)  | 0xE1 0xBF 0xBB | U+1F7C (ὼ)  | U+1F7D (ώ)  |     2 |     -126 | GREEK      |\n",
      "| U+2160 (Ⅰ)  | 0xE2 0x85 0xA0  | U+216F (Ⅿ)  | 0xE2 0x85 0xAF | U+2170 (ⅰ)  | U+217F (ⅿ)  |    16 |      +16 | ROMAN      |\n",
      "| U+24B6 (Ⓐ)  | 0xE2 0x92 0xB6  | U+24CF (Ⓩ)  | 0xE2 0x93 0x8F | U+24D0 (ⓐ)  | U+24E9 (ⓩ)  |    26 |      +26 | CIRCLED    |\n",
      "| U+2C00 (Ⰰ)  | 0xE2 0xB0 0x80  | U+2C2F (Ⱟ)  | 0xE2 0xB0 0xAF | U+2C30 (ⰰ)  | U+2C5F (ⱟ)  |    48 |      +48 | GLAGOLITIC |\n",
      "| U+AB70 (ꭰ)  | 0xEA 0xAD 0xB0  | U+ABBF (ꮿ)  | 0xEA 0xAE 0xBF | U+13A0 (Ꭰ)  | U+13EF (Ꮿ)  |    80 |   -38864 | CHEROKEE   |\n",
      "| U+FF21 (Ａ) | 0xEF 0xBC 0xA1  | U+FF3A (Ｚ) | 0xEF 0xBC 0xBA | U+FF41 (ａ) | U+FF5A (ｚ) |    26 |      +32 | FULLWIDTH  |\n"
     ]
    }
   ],
   "source": [
    "# Build table\n",
    "range_rows_3byte = []\n",
    "for start, end, offset in ranges_3byte:\n",
    "    length = end - start + 1\n",
    "    try:\n",
    "        start_char = chr(start)\n",
    "        end_char = chr(end)\n",
    "        target_start_char = chr(start + offset)\n",
    "        target_end_char = chr(end + offset)\n",
    "        script = unicodedata.name(start_char, \"\").split()[0] if length > 1 else \"\"\n",
    "    except (ValueError, OverflowError):\n",
    "        start_char = end_char = target_start_char = target_end_char = \"?\"\n",
    "        script = \"\"\n",
    "\n",
    "    range_rows_3byte.append(\n",
    "        {\n",
    "            \"Src Start\": f\"U+{start:04X} ({start_char})\",\n",
    "            \"Src Start Hex\": utf8_hex(start_char),\n",
    "            \"Src End\": f\"U+{end:04X} ({end_char})\",\n",
    "            \"Src End Hex\": utf8_hex(end_char),\n",
    "            \"Tgt Start\": f\"U+{start + offset:04X} ({target_start_char})\",\n",
    "            \"Tgt End\": f\"U+{end + offset:04X} ({target_end_char})\",\n",
    "            \"Len\": length,\n",
    "            \"Offset\": f\"+{offset}\" if offset > 0 else str(offset),\n",
    "            \"Script\": script,\n",
    "        }\n",
    "    )\n",
    "\n",
    "multi_ranges_3byte = [r for r in range_rows_3byte if r[\"Len\"] > 1]\n",
    "print(tabulate(multi_ranges_3byte, headers=\"keys\", tablefmt=\"github\"))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "StringZilla",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
